Ios 多线程的正确使用

Ios 多线程的正确使用,ios,multithreading,grand-central-dispatch,nsoperation,nsoperationqueue,Ios,Multithreading,Grand Central Dispatch,Nsoperation,Nsoperationqueue,我想知道如何在iOS中使用多线程。我知道GCD和NSOperationQueue,但不知道如何正确使用它们 我应该何时使用GCD/NSOperationQueue 如果结果视图不再在视图中,如何取消队列?(即,发送某个请求,但用户随后决定点击后退按钮转到另一个视图,这意味着我不再需要该“某物”) 任何例子都将不胜感激 谢谢。只需浏览一下,您就可以找到方法setSuspended:和cancelAllOperations。这可以用来实现您的要求。可能值得一提的是,一旦操作开始(GCD块或NSO操作

我想知道如何在iOS中使用多线程。我知道GCD和NSOperationQueue,但不知道如何正确使用它们

  • 我应该何时使用GCD/NSOperationQueue
  • 如果结果视图不再在视图中,如何取消队列?(即,发送某个请求,但用户随后决定点击后退按钮转到另一个视图,这意味着我不再需要该“某物”)
  • 任何例子都将不胜感激


    谢谢。

    只需浏览一下,您就可以找到方法
    setSuspended:
    cancelAllOperations
    。这可以用来实现您的要求。

    可能值得一提的是,一旦操作开始(GCD块或NSO操作),您只能在操作本身内置取消功能的情况下取消它。例如,NSOperation有一个
    -cancel
    方法,但只有当您的操作从操作内部定期检查
    -isCanceled
    标志,然后在看到操作已取消时提前返回时,该方法才有效。从
    -[NSOperation cancel]
    的文档中:

    此方法不会强制您的操作代码停止。相反,它 更新对象的内部标志以反映状态的更改。如果 操作已完成执行,此方法没有 效果。取消当前在操作中的操作 队列,但尚未执行,可以删除 队列中的操作比平常更快

    同样,GCD块可以检查一些共享标志并提前返回,但这两种机制都不能强制取消操作。原因是,如果您能够强制取消操作,它将没有机会清理自身,因此任务期间分配的任何内存都将泄漏


    另一种绕过此限制的常见方法是将任务划分为多个更小的操作,以便单个操作完成的时间足够小,可以忽略不计。这使您能够在整个队列级别挂起/取消队列/NSOperationQueue,并大致达到预期效果。

    :)谢谢您回答了问题1,我仍然不确定如何操作队列,以便知道何时取消正在运行的操作。