Ios 多线程的正确使用
我想知道如何在iOS中使用多线程。我知道GCD和NSOperationQueue,但不知道如何正确使用它们Ios 多线程的正确使用,ios,multithreading,grand-central-dispatch,nsoperation,nsoperationqueue,Ios,Multithreading,Grand Central Dispatch,Nsoperation,Nsoperationqueue,我想知道如何在iOS中使用多线程。我知道GCD和NSOperationQueue,但不知道如何正确使用它们 我应该何时使用GCD/NSOperationQueue 如果结果视图不再在视图中,如何取消队列?(即,发送某个请求,但用户随后决定点击后退按钮转到另一个视图,这意味着我不再需要该“某物”) 任何例子都将不胜感激 谢谢。只需浏览一下,您就可以找到方法setSuspended:和cancelAllOperations。这可以用来实现您的要求。可能值得一提的是,一旦操作开始(GCD块或NSO操作
谢谢。只需浏览一下,您就可以找到方法
setSuspended:
和cancelAllOperations
。这可以用来实现您的要求。可能值得一提的是,一旦操作开始(GCD块或NSO操作),您只能在操作本身内置取消功能的情况下取消它。例如,NSOperation有一个-cancel
方法,但只有当您的操作从操作内部定期检查-isCanceled
标志,然后在看到操作已取消时提前返回时,该方法才有效。从-[NSOperation cancel]
的文档中:
此方法不会强制您的操作代码停止。相反,它
更新对象的内部标志以反映状态的更改。如果
操作已完成执行,此方法没有
效果。取消当前在操作中的操作
队列,但尚未执行,可以删除
队列中的操作比平常更快
同样,GCD块可以检查一些共享标志并提前返回,但这两种机制都不能强制取消操作。原因是,如果您能够强制取消操作,它将没有机会清理自身,因此任务期间分配的任何内存都将泄漏
另一种绕过此限制的常见方法是将任务划分为多个更小的操作,以便单个操作完成的时间足够小,可以忽略不计。这使您能够在整个队列级别挂起/取消队列/NSOperationQueue,并大致达到预期效果。:)谢谢您回答了问题1,我仍然不确定如何操作队列,以便知道何时取消正在运行的操作。