NSOperationQueue与GCD

时间:2011-11-07 06:44:14

标签: ios multithreading cocoa-touch grand-central-dispatch nsoperationqueue

在什么情况下你更喜欢使用NSOperationQueue而不是GCD?

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

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

3 个答案:

答案 0 :(得分:19)

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

答案 1 :(得分:7)

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

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

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

答案 2 :(得分:0)

在更高级别,我发现NSOperationQueue更优雅地管理任务/操作,而不是使用GCD在较低级别处理它们。