GCD技术确实很棒,不过有时候采用标准系统库的组件,效果会更好。
GCD技术的同步机制非常优秀,对于那些只需执行一次的代码来说,使用GCD最方便。但在执行后台任务时,还可以使用操作队列(NSOperationQueue)。
操作队列的底层是用GCD来实现的。
两者的差别:GCD是纯C的API,而操作队列是Objective-C的对象。GCD中,任务用块来表示,是一个轻量级的数据结构,而操作(NSOperation)则是个更为重量级的Objective-C对象。
操作队列的优势:
- 运行任务之前,可以在NSOperation对象上调用cancel方法,即可取消操作,不过,已经启动的任务无法取消,而GCD把块安排到队列就无法取消。
- 可以指定操作间的依赖关系,使特定操作必须在另一个操作执行完毕后方可执行。
- 可以通过KVO(键值观察)来监控NSOperation对象的属性变化(isCancelled,isFinished等)
- 可以指定操作的优先级
- 可以通过重用NSOperation对象来实现更丰富的功能
在解决多线程与任务管理问题时,派发队列并非唯一方案。
操作队列提供一套高级API,能实现纯GCD所具备的绝大部分功能,而且还能完成一些更为复杂的操作,那些操作若改用GCD来实现,则需另外编写代码。
网友评论