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