iOS NSOperationQueue与GCD


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



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值