NSOperationQueue与GCD

xon*_*rlz 11 multithreading cocoa-touch nsoperationqueue grand-central-dispatch ios

在什么情况下你更喜欢使用NSOperationQueueGCD?

根据我对这两者的有限经验,我认为NSOperationQueue你基本上可以控制有多少并发操作.

使用GCD,您无法执行此操作,因为您正在使用队列.除了你可以用多核处理器以某种方式模拟这个,虽然我仍然认为没有办法控制它.

Par*_*fna 20

NSOperationQueueGCD从iOS 4开始构建.使用最简单的API来完成手头的任务.如果是性能问题,请测量,然后根据需要重新评估.dispatch_async是较低级别,通常是C型的东西(但不限于此),并且适用于一次性和顺序式交易.NSOperationQueues是更高级别的Objective-C,如果您在代码中的各个点添加大量操作,并且/或者需要管理并发性,优先级和依赖性,那么它们是很好的.


Cat*_*Man 7

我假设NSPriorityQueue你的意思是NSOperationQueue?使用NSOperationQueue优于GCD的主要原因是,如果您需要其附加功能:

  • 较旧的OS支持
  • 关于操作属性的KVO
  • 依赖
  • 队列宽度限制(尽管您可以使用dispatch_semaphore_t在GCD中相当容易地完成此操作)

否则,除非您使用的是采用NSOperationQueue的API,否则GCD可能是更好的选择