代理delegate. NSNotifiction. Block.KVO的区别

代理

  • 代理是一对一的关系.
  • delegate 需要定义协议方法并且实现协议方法,会使代码结构变复杂.
  • delegate 的执行效率没有Block的高.

Block

  • 代码结构更加紧凑,不需要额外定义方法.
  • 需要注意防止循环引用,使用__weak关键字修饰.
  • 如果需要在块中修改外部变量时,需要对外部变量使用__block关键词修饰.

NSNotifiction

  • NSNotifiction是通知,是一对多的使用场景.
  • 在某些情况下KVO和NSNotifiction是一样的,都是状态变化之后告知对方.
  • NSNotifiction的特点是,就是需要 被观察者先主动发出通知,然后观察者注册监听后再来进行响应,比KVO多了发送通知的一步,但其优点是监听不局限于属性的变化,还可以对多种多样的状态 变化进行监听 ,监听范围广,使用也更灵活.

KVO

  • KVO就是cocoa框架实现的观察者模式,一般同KVC搭配使用,通过KVO可以监测一个值的变化:如view的高度变化 .
  • 是一对多的关系,一个值的变化会通知所有的观察者.
  • 如果需要在块中修改外部变量时,需要对外部变量使用__block关键词修饰.

你可能感兴趣的:(代理delegate. NSNotifiction. Block.KVO的区别)