天天看点

GCD和NSOperation的比较

你也许听说过 Grand Central Dispatch (GCD)。简而言之,GCD包含语言特性,运行时刻库和系统增强(提供系统性和综合性的提升,从而在iOS和OS X的多核硬件上支持并发操作)。

在Mac OS X v10.6和iOS4之前,NSOperation 与 NSOperationQueue 不同于GCD,他们使用了完全不同的机制。从Mac OS X v10.6和iOS4开始,NSOperation 和 NSOperationQueue是建立在GCD上的。作为一种通例,苹果推荐使用最高级别的抽象,然而当评估显示有需要时,会突然降到更低级别。

以下是对两者的快速比较,它会帮助你决定何时何地去使用GCD或者NSOperation和NSOperationQueue;

  • GCD是一种轻量级的方法来代表将要被并发执行的任务单位。你并不需要去计划这些任务单位;系统会为你做计划。在块(block)中添加依赖会是一件令人头疼的事情。取消或者暂停一个块会给一个开发者产生额外的工作!代码的逻辑关系相对容易理解便于管理。
  • NSOperation和NSOperationQueue 对比GCD会带来一点额外的系统开销,但是你可以在多个操作(operation)中添加附属。你可以重用操作,取消或者暂停他们。NSOperation和KVO是兼容的;例如,你可以通过监听NSNotificationCenter去让一个操作开始执行。当某个NSOperation对象依赖于其它NSOperation对象的完成时,就可以通过addDependency方法添加一个或者多个依赖的对象,只有所有依赖的对象都已经完成操作,当前NSOperation对象才会开始执行操作。另外,通过removeDependency方法来删除依赖对象。