代理
- 代理是一对一的关系.
- delegate 需要定义协议方法并且实现协议方法,会使代码结构变复杂.
- delegate 的执行效率没有Block的高.
Block
- 代码结构更加紧凑,不需要额外定义方法.
- 需要注意防止循环引用,使用__weak关键字修饰.
- 如果需要在块中修改外部变量时,需要对外部变量使用__block关键词修饰.
NSNotifiction
- NSNotifiction是通知,是一对多的使用场景.
- 在某些情况下KVO和NSNotifiction是一样的,都是状态变化之后告知对方.
- NSNotifiction的特点是,就是需要 被观察者先主动发出通知,然后观察者注册监听后再来进行响应,比KVO多了发送通知的一步,但其优点是监听不局限于属性的变化,还可以对多种多样的状态 变化进行监听 ,监听范围广,使用也更灵活.
KVO
- KVO就是cocoa框架实现的观察者模式,一般同KVC搭配使用,通过KVO可以监测一个值的变化:如view的高度变化 .
- 是一对多的关系,一个值的变化会通知所有的观察者.
- 如果需要在块中修改外部变量时,需要对外部变量使用__block关键词修饰.