《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