iOS NSOperationQueue与GCD
NSOperationQueue 是用GCD构建封装的,它是GCD的高级抽象!
一、对比
1、OC先引入的是NSOperation,iOS4之后引入了GCD和NSOperationQueue,NSOperationQueue内部是用GCD实现的。
GCD是底层的C语言构成的API,而NSOperationQueue 及相关对象是Object的对象。GCD中,队列中执行的是由Block构成的任务,它是一个轻量级的数据接结构;而operation作为对象,未我们提供了更多的选择;
2、在NSOperationQueue 中,我们可以随时取消已经被设定要准备执行的任务(当然,已经开始的任务就无法阻止了),而GCD需要许多复杂的代码才能实现停止已经加入queue的Block。
3、NSOperation能够方便地设置依赖关系。在NSOperation中,我们能够设置NSOperation的priority优先级,能够是同一个并行队列中的任务区分先后的执行;而在GCD中如果要区分Block的优先级也需要大量复杂的代码;
4、我们能将KVO应用在NSOperation中,可以监听一个Operation是否完成或者取消,这样子能比GCD更加有效的掌控我们执行的后台任务;
5、我们能够堆NSOperation进行继承,在这之上添加成员变量和成员方法,提高代码的复用性,这比简单的将Block任务排入执行队列更有自由度,能够添加更多的定制功能。
小结:NSOperationQueue提供了更多你在编写多线程程序时需要的功能,并隐藏了许多线程调度,线程取消及线程优先级的复杂代码,为我们提供简洁高效的API入口。从变成原则来讲,我们需尽可能地使用高等级、封装完美的API,必要时才使用底层的API。
二、NSOperation的常用方法
1、start :开始
2、addDependency,removeDependency :
添加从属性,删除从属性。比如线程a和b,如果a属于b,那么a会等到b结束后才开始执行。
3、setQueuePriority,设置线程优先级:
4、setCompletionBlock:设置回调
三、多线程优缺点
优点:
1、资源利用率更高;
2、程序设计更简单;
3、程序响应更快。
缺点:
1、更多的线程需要更多的内存空间;
2、当多个线程争夺一个资源的时候要注意安全问题。
参考:
http://segmentfault.com/a/1190000003910655
http://m.blog.csdn.net/blog/jjunjoe/10188433
http://blog.csdn.net/fanxiaochuan/article/details/10310289