NSOperationQueue vs GCD

在什么情况下,你宁愿使用NSOperationQueue不是GCD?

从我对这两者的有限经验来看,我认为NSOperationQueue基本上可以控制有多less并发操作。

GCD你不能这样做,因为你正在使用一个队列。 除了你可以用多核处理器模拟这个,但是我仍然觉得没有办法控制它。

NSOperationQueue是基于iOS 4的GCD构build的。使用最简单的API来处理任务。测量是否是性能问题,然后在需要时重新评估。 dispatch_async是较低级别的,通常是Ctypes的东西(但不限于此),适用于一次性和顺序types的交易。 NSOperationQueues是更高层次的Objective-C的东西,如果你在你的代码的不同位置添加了很多操作,并且/或者需要pipe理并发性,优先级和依赖关系,那么它们是非常好的。

我假设你是指NSOperationQueue的NSPriorityQueue? 通过GCD使用NSOperationQueue的主要原因是如果你需要它的附加function:

  • 较早的操作系统支持
  • KVO的操作属性
  • 依赖
  • 队列宽度限制(尽pipe你可以用dispatch_semaphore_t在GCD中很容易地做到这一点)

否则,除非你使用一个NSOperationQueue API,否则GCD可能是一个更好的select

在更高的层次上,我发现NSOperationQueue更好地pipe理任务/操作,而不是使用GCD在较低级别处理它们。