NSOperationQueue本质上是对GCD的封装,但提供了更强的任务依赖关系管理能力,允许更加灵活的定义任务间的执行顺序。
其相对于GCD的主要优势包括:
1. 可以通过NSOperationQueue的属性设置任务并发数。
2. 可以通过NSOperation的addDependicy或removeOperation方法添加或移除依赖(gcd也可通过dispatch_group设置依赖,但没有移除依赖的方法)。
3. 可以通过重写方法(isReady, isExcuesed、isCanceled, isFinished)实现任务执行状态的自定义控制。
注意:
若只重写NSOperation的main方法,由系统控制任务状态;若重写了start方法,则需要自定义任务状态。系统默认通过KVO监控对应属性的值的变化,在状态为Finished后,对相关内存进行回收。
NSOperation Queue中任务开始顺序(即main或start方法执行顺序)是顺序执行的,但由于任务在不同线程中执行, 结束顺序无法确定。