NSNotification、Delegate、Block和KVO的区别是什么

简介: NSNotification、Delegate、Block和KVO的区别是什么

Delegate(代理)是一种回调机制,是一对一的关系;而通知是基于观察者模式的一对多的关系,消息会发送给所有注册为事件观察者的对象;Delegate比Notification的执行效率要高。


Block和Delegate一样通常也是一对一的通知,使用场景相同,可以说Block是Delgate的另一种形式,但Block更加简洁直接且轻便灵活,不需要像Delegate那样需要定义协议很多方法,而且代理对象要实现协议方法,还需要建立对象间的代理关系才可以通信。在通信事件比较多的情况下,还是建议使用Delegate,Delegate的定义实现形式更加直观清楚。


KVO就是Cocoa框架实现的观察者模式,一般同KVC搭配使用,通过KVO可以监测一个值的变化。例如,View的高度变化是一对多的关系,一个值的变化会通知所有的观察者。NSNotification是通知,也是一对多的使用场景。在某些情况下,KVO和NSNotification是一样的,都是状态变化之后告知对方。


NSNotification的特点是需要被观察者先主动发出通知,然后观察者注册监听后再来进行响应,比KVO多了发送通知的一步,但是其优点是监听不局限于属性的变化,还可以对多种多样的状态变化进行监听,监听范围广,使用也更灵活。


KVO一般的使用场景是数据,需求是数据变化,例如股票价格变化一般使用KVO(观察者模式)实现。


Delegate一般的使用场景是行为,需求是需要别人帮我做一件事情,例如买卖股票就一般使用Delegate来实现。


Notification一般是进行全局通知,例如好消息一出,通知大家去买入。

Delegate是强关联,就是委托和代理双方互相知道,你委托别人买股票你就需要知道经纪人,经纪人也需要知道自己的顾客。


Notification是弱关联,利好消息发出,你不需要知道是谁发的也可以做出相应的反应,同理发消息的人也不需要知道接收的人就可以正常发出消息。

摘自《iOS程序员面试笔试宝典》


目录
相关文章
c#编程:事件delegate学习笔记-3
c#编程:事件delegate学习笔记-3
131 0
|
程序员 iOS开发
UIGestureRecognizer类常用属性以及方法
UIGestureRecognizer类常用属性以及方法
117 0
|
iOS开发
KVC change all Private
KVC change all Private
128 0
Object C学习笔记16-委托(delegate)
  在.NET中都知道委托(delegate),通俗点的解释就是可以将方法作为一个参数传到另外一个方法中使用。   委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值。
979 0
|
Web App开发 JavaScript