我想知道如何在iOS中使用多线程。我知道GCD和NSOperationQueue,但我不确定如何正确使用它们。
非常感谢任何例子。
谢谢。
答案 0 :(得分:1)
值得一提的是,一旦操作开始(GCD块或NSOperation),只有在操作本身内置了取消能力时才能取消它。例如,NSOperation有一个-cancel
方法,但只有当您的操作定期从操作内部检查-isCanceled
标志,然后如果它看到操作已被取消时才提前返回,则该方法有效。来自-[NSOperation cancel]
的文档:
此方法不会强制您的操作代码停止。相反,它 更新对象的内部标志以反映状态的变化。如果 操作已经完成执行,此方法没有 影响。取消当前正在进行的操作 队列,但尚未执行,可以删除 比平常更快地从队列中进行操作。
同样,GCD块可以检查一些共享标志并提前返回,但这些机制都不能强制取消操作。这样做的原因是,如果你能够强制取消操作,它就没有机会自我清理,因此在任务期间分配的任何内存都将被泄露。
围绕此限制的另一种常见方法是将您的任务划分为更多更小的操作,以便单个操作完成的时间足够小,可以忽略不计。这使您能够在整个队列级别暂停/取消队列/ NSOperationQueue,并获得大致所需的效果。
答案 1 :(得分:0)
通过Apple Docs,您可以找到方法setSuspended:
和cancelAllOperations
。这可以用来实现你的要求。