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快

46.不要使用dispatch_get_current_queue

系统框架

47.