GCD是纯C的API,任务用块表示,块是个轻量级数据结构。而NSOperationQueue是OC对象
哪些情况下应该使用GCD?
- 如果要实现同步机制,建议优先选择GCD而不是@synchronized或者NSLock。
- 如果代码只执行一次,使用dispatch_once更方便。
哪些情况下更应该使用NSOperation比?
-
取消某个操作。
在NSOperation对象上调用cancel方法,该方法会设置对象内的标志位,用以表明此任务不需执行了。但是已经启动的任务无法取消。而GCD那套架构是“安排好任务之后就不管了”。 -
指定操作间的依赖关系。
-
通过键值观测机制监控NSOperation对象的属性。
NSOperation对象有很多属性都适合通过KVO来监听。比如可以通过isCancelled属性来判断是否已取消。还可以通过isFinished来判断任务是否已经完成。
*指定操作的优先级。
操作的优先级表示此操作与队列中其他操作之间的优先关系。优先级高的先执行,优先级低的后执行。
- 重用NSOperation对象。
系统内置了NSOperation(NSBlockOperation)子类供开发者使用,要是不想使用,可以自己创建。
网友评论