Effective-oc 笔记(下)
6、7章
Block和GCD 37-46
系统框架 47-52
37.理解Block
- block在定义范围有效;栈block的生命周期,括号范围内
- 堆block,生命周期被管理
38.typedef 常用Block
- typdef void(^DKBLock)(void *);
- 好处 修改方便、易读
- 建议根据使用场景,同类型block 声明为不同name
39.Block的好处
- delegate的缺点、如果包含多个委托,同一个函数要区分
- block更集中,易维护、易读
- 建议多个参数,整理为一个handler,参数之间可以配合使用
40.块里的循环引用问题
- 主动打破 块里将block对象释放(不执行就会有问题)
- block持有者 使用完处理掉
41.多用派发队列,少用锁
- 多个synchronized(self),共享锁,不推荐
- 异步调用设置方法,由于涉及拷贝块,衡量下拷贝和执行的速度
42.多用GCD,少用performSelector
- performSelector局限多,参数支持最多2个
- performSelector返回值限定id,基础类型需要做转换;返回值是c语言结构体就不建议用
43.GCD和NSOperation
- dispatch_once 执行一次;单例
- NSOperation:可以取消、依赖、kvo观察任务状态
44.Dispatch Group
- dispatch_group_wait 阻塞等待完成执行
- dispatch_group_notify 非阻塞等待完成
- dispatch_apply
45.dispatch_once
标准推荐写法
static Class *instance = nil;
static dispatch_group_t token;
dispatch_once {&token, ^{ instance = [[Class alloc]init]}}
return instance;
- 比synchronized快