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。

四十六、不要使用dispatch_get_current_queue

上一篇下一篇

猜你喜欢

热点阅读