NSOperationQueue、performSelector优劣——笔记

《Effective Objective-C 2.0  编写高质量iOS与OS X代码的52个有效方法》(第四十二条:多用GCD,少用performSelector系列方法)(第四十三条:掌握GCD及操作队列的使用时机)笔记

要点如下:

1、performSelector可能会导致内存泄漏

因为使用performSelector,编译器不知道将要调用的选择子是什么,也就无法知道方法名,以及是否有返回值,返回值是否需要保留和释放

performSelector能实现的延迟、开一个线程执行任务等功能,都可以用GCD的dispatch_after、dispatch_async等来实现

2、NSOperationQueue(操作队列)是OC对象,GCD(派发队列)是纯C的API

3、NSOperationQueue操作队列是通过"addOperationWithBlock:"添加NSBlockOperation来执行任务的

4、NSOperationQueue的优点在于:

*可以取消某个操作:运行某个任务之前可以用cancel取消(因为对象内有个标志位表示此任务是否需要执行),不过已经启动的任务无法取消。

*可以指定操作间的依赖关系:一个操作可以依赖其他多个操作,如需要多个操作执行完之后才执行某个操作

*可以使用KVO:如使用KVO监听isCancelled属性判断任务是否已取消,监听isFinished属性来判断任务是否已完成

*可以指定操作优先级:优先级高的先执行,优先级低的后执行

*可以重用NSOperation对象:已经定义好了一些方法,可以直接使用,并且符合”可复用“原则

5、NSNotificationCenter使用操作队列(NSOperationQueue),而不是派发队列(GCD)

 

参考:https://www.jianshu.com/p/4b1d77054b35

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值