Notification和KVO有什么不同

Notification是推送通知,我们可以建立一个通知中心,存放创建多个通知,在不同的地方在需要的时候push调用
和KVO不同的是,KVO是键值观察,只能观察一个值有一个“Notification Center”的概念,他是一个单例对象,允许当事件发生的时候通知一些对象,满足控制器与一个任意的对象进行通信的目的,这种模式的基本特征就是接收到在该controller中发生某种事件而产生的消息,controller用一个key(通知名称),这样对于controller是匿名的,其他的使用同样地key来注册了该通知的对象能对通知的事件作出反应。


notification的优势:


1.不需要写多少代码,实现比较简单


2.一个对象发出的通知,多个对象能进行反应,一对多的方式实现很简单


缺点:


1.编译期不会接茬通知是否能被正确处理


2.释放注册的对象时候,需要在通知中心取消注册


3.调试的时候,程序的工作以及控制流程难跟踪


4.需要第三方来管理controller和观察者的联系


5.controller和观察者需要提前知道通知名称、UserInfo dictionary keys。如果这些没有在工作区间定义,那么会出现不同步的情况


6.通知发出后,发出通知的对象不能从观察者获得任何反馈。






KVO


KVO是一个对象能观察另一个对象属性的值,前两种模式更适合一个controller和其他的对象进行通信,而KVO适合任何对象监听另一个对象的改变,这是一个对象与另外一个对象保持同步的一种方法。KVO只能对属性做出反应,不会用来对方法或者动作做出反应。


优点:


1.提供一个简单地方法来实现两个对象的同步


2.能对非我们创建的对象做出反应


3.能够提供观察的属性的最新值和先前值


4.用keypaths 来观察属性,因此也可以观察嵌套对象


缺点:


1.观察的属性必须使用string来定义,因此编译器不会出现警告和检查


2.对属性的重构将导致观察不可用


3.复杂的“if”语句要求对象正在观察多个值,这是因为所有的观察都通过一个方法来指向
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值