Effective Objective-C 2.0笔记(六)Bl
2019-02-02 本文已影响0人
孔朝阳
三十七、理解块这一概念
1、returnType (^blockName) (parameters)
2、在声明block的范围里,所有变量都可以为其所捕获,而被其捕获的变量不可以在block里修改
3、如果block所捕获的变量是对象类型会自动保留
4、如果block通过读取或写入操作捕获了实例变量,那么也会自动把self变量捕获
5、block在捕获self时会将其保留,如果self所指对象也保留了block,则产生保留环
三十八、为常用的块类型创建typedef
三十九、用handler块降低代码分散程度
1、建议使用同一个块处理成功和失败情况。
四十、用块引用其所属对象时不要出现保留环
四十一、多用派发队列,少用同步锁
1、@synchronized(self){}会自动创建锁,等待块中的代码执行完毕再释放锁。
2、使用派发队列比@synchronized或NSLock更简单高效
3、执行异步派发时,需要拷贝块
4、在队列中,栅栏块必须单独执行,不能与其他块并行
5、使用同步队列及栅栏块,可以令同步行为更高效
四十二、多用GCD,少用performSelector系列方法
1、performSelector系列方法在内存管理方便容易出错,ARC编译器很难插入适当的内存管理方法。
四十三、掌握GCD及操作队列的使用时机
四十四、通过Dispatch Group机制,根据系统资源状况来执行任务
四十五、使用dispatch_once来执行只需运行一次的线程安全代码
1、单例模式(singleton)常见实现方式sharedInstance中为保证线程安全,需添加同步锁,可以选择使用dispatch_once。