43、掌握GCD及操作队列的使用时机
开发者可以把操作以NSOperation子类的形式放在队列中,而这些操作也能后并发执行。虽说“操作队列”(operation queue)在GCD之前就有了,其中某些设计原理因操作队列而流行,GCD就是基于这些原理构建的。实际上,从iOS4与Mac OS10.6开始,操作队列在底层是用GCD来实现的。
GCD是纯C的API,而操作队列这是OC的对象;在GCD中,任务用块来表示,而块时一个轻量级数据结构,而“操作”(operation)则是个更为重量级的OC对象。
使用NSOperation及NSOperationQueue的好处:
取消某个操作。已经启动的任务无法取消(GCD队列的任务就无法取消)
指定操作间的依赖关系。
通过键值观察机制监控
NSOperation对象的属性。isCancelled、isFinished...指定操作的优先级。此操作与队列中其他操作之间的优先关系(GCD队列确实有优先级,不过那是针对整个队列的不是针对每个块的)
重用NSOperation对象。可以继承该类,存放任何信息。对象在执行时可以充分利用继承而来的各种信息,还可以随意调用其方法。
操作队列有很多地方胜过派发队列:操作队列提供了多种执行任务的方式,而且都是写好的,直接就能使用。开发者不用再编写复杂的调度器,也不用自己来实现取消操作或指定操作优先级的功能,这些事情操作队列都已经实现好了。
要点:
在解决多线程与任务管理问题时,派发队列并非唯一方案
操作队列提供了一套高层的OC API,能实现纯GCD所具备的绝大部分功能,而且还能完成一些更为复杂的操作,那些操作若改用GCD来实现,则需另外编写代码
Last updated
Was this helpful?