是什么在iOS的多线程,因为我们有三个选择GCD,最好的办法NSThread
和NSOperationQueue
? 我很困惑,其中一个是最好的? 如果没有,那么它应该在什么情况下使用,以及它们如何不同,另外,如果有人使用了一些很好的例子NSOperationQueue
,请分享,这样我可以学习。
Answer 1:
答案很简单:
当你想使用NSThread(甚至并行线程API)或需要有超过您所创建的线程直接控制,例如,你需要在线程的优先级进行细粒度的控制或与该售货/消耗线程一些其他子系统直接接口的对象和你需要保持与它在同一页上。 这种情况是罕见的,但他们确实存在,特别是在实时应用。
使用GCD时,你的任务很适合简单的并行处理,比如你只是想折腾一些工作“到背景”用很少的额外工作,你有你只想序列化到访问某些数据结构(和串行队列是巨大的这样做,在一个无锁的方式),你有一些因为这将借给自己很好的并行与dispatch_apply(),你有一些数据源/定时器,GCD的来源API将使你的背景,等等等等,轻松应对循环。GCD是相当强大的,你可以使用它的很多比这更多,但这些都是相对的“没有道理的”情况下,您不希望在初始化和设置任务这么多只是被抓住了“做基础东西并行”。
当你(在直C将POSIX API的VS写入)可可API层是已经起来,有你想要并行更复杂的操作使用的NSOperation。 的NSOperation允许子类,任意复杂的依赖关系图,取消和一个支持许多其他更高级别的语义可能对您有用的。 的NSOperation实际使用GCD在幕后因此它的每一个位多核,多线程能力的GCD,但它也带来凑凑热闹Foundation框架所以,如果你在POSIX层黑客,你可能想使用选项#2。
正如其他人说,然而,这一切都取决于你试图这样做,没有单一的,甚至普遍正确的回答你的问题。
Answer 2:
我一直倾向于NSOperationQueue最近。 这使用GCD内部,是线程安全的,也就是使用非常简单。
文章来源: Which is the best of GCD, NSThread or NSOperationQueue? [closed]