Sum*_*ive 22 multithreading nsthread nsoperationqueue grand-central-dispatch ios
什么是iOS中多线程的最佳方式,因为我们有三个选项GCD NSThread
,和NSOperationQueue
?我很困惑哪一个是最好的?如果没有,那么哪个应该用于什么情况以及它们如何不同,如果有人有一些很好的使用示例NSOperationQueue
,请分享以便我可以学习.
jkh*_*jkh 40
简单回答:
当您需要或需要直接控制您创建的线程时,请使用NSThread(甚至是pthreads API),例如,您需要对线程优先级进行细粒度控制,或者与直接销售/使用线程对象的其他子系统连接,并且需要与它保持同一页面.这种情况很少见,但确实会发生,特别是在实时应用中.
当你的任务非常适合简单的并行化时使用GCD,例如你只想把一些工作"投入到后台"而只需要很少的额外工作,你有一些数据结构你只想序列化访问(并且串行队列很棒)为了以无锁方式执行此操作),您有一些for循环可以很好地与dispatch_apply()进行并行化,您有一些数据源/计时器,GCD的源API将使您能够在后台轻松处理等等GCD是非常强大的,你可以使用它远远超过这个,但这些都是相对"没有脑子"的场景,你不想陷入初始化和设置任务,就像简单地"做基本"并行的东西".
当你已经进入Cocoa API层时(使用直接C写入POSIX API)并使用更复杂的操作来进行并行化时,请使用NSOperation.NSOperation允许子类化,任意复杂的依赖图,取消和支持许多其他可能对您有用的更高级语义.NSOperation实际上使用了GCD,所以它就像GCD一样多核,多线程,虽然它也带来了基础框架,所以如果你正在攻击POSIX层,你可能想要使用它选项#2.
然而,正如其他人所说,这一切都取决于你要做什么,所以对你的问题没有单一甚至普遍正确的答案.