GCD 和 NSOperation 区别及各自应用场景
博客专区 > 壹峰 的博客 > 博客详情
GCD 和 NSOperation 区别及各自应用场景
壹峰 发表于4个月前
GCD 和 NSOperation 区别及各自应用场景
  • 发表于 4个月前
  • 阅读 9
  • 收藏 0
  • 点赞 0
  • 评论 0

GCD 相关知识以前写过一些东西,点击查看 
GCD主要特点: 
1)GCG 是iOS4.0推出的,主要针对多核CPU 做了优化 
2)GCD是 C 语言的技术 
3)GCD 提供了一些 NSOperation 不具备的功能,比如一次性执行(创建单例),延迟执行,调度组.

NSOperation 特点: 
1) NSOperation 是 iOS2.0后推出的,iOS4.0之后重写了NSOperation. 
2) NSOperation 将操作(异步的任务)添加到队列(并发队列),就会执行制定操作的函数. 
3) NSOperation里可以方便的设置操作: 
1⃣️最大并发数 
2⃣️队列的暂停/继续 
3⃣️取消所有的操作 
4⃣️指定操作之间的依赖关系(GCD可以用同步实现) 
**使用NSOperation 需要注意几点点: 
1) 注意避免产生循环依赖 
2) 要先设置依赖关系,然后添加到队列

GCD 和 NSOperation的区别主要表现在以下几方面:

1) GCD是一套 C 语言API,执行和操作简单高效,因此NSOperation底层也通过GCD实现,这是他们之间最本质的区别.因此如果希望自定义任务,建议使用NSOperation;

2) 依赖关系,NSOperation可以设置操作之间的依赖(可以跨队列设置),GCD无法设置依赖关系,不过可以通过同步来实现这种效果;

3) KVO(键值对观察),NSOperation容易判断操作当前的状态(是否执行,是否取消等),对此GCD无法通过KVO进行判断;

4) 优先级,NSOperation可以设置自身的优先级,但是优先级高的不一定先执行,GCD只能设置队列的优先级,如果要区分block任务的优先级,需要很复杂的代码才能实现;

5) 继承,NSOperation是一个抽象类.实际开发中常用的是它的两个子类:NSInvocationOperation和NSBlockOperation,同样我们可以自定义NSOperation,GCD执行任务可以自由组装,没有继承那么高的代码复用度;

6) 效率,直接使用GCD效率确实会更高效,NSOperation会多一点开销,但是通过NSOperation可以获得依赖,优先级,继承,键值对观察这些优势,相对于多的那么一点开销确实很划算,鱼和熊掌不可得兼,取舍在于开发者自己;

7)可以随时取消准备执行的任务(已经在执行的不能取消),GCD没法停止已经加入queue 的 block(虽然也能实现,但是需要很复杂的代码)

基于GCD简单高效,更强的执行能力,操作不太复杂的时候,优先选用GCD;而比较复杂的任务可以自己通过NSOperation实现.

共有 人打赏支持
粉丝 5
博文 447
码字总数 6877
×
壹峰
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: