IOS开发-KVO与通知的区别

KVO提供一种机制,当指定的被观察的对像的属性被修改后,KVO会自动通知响应的观察者,KVC(键值编码)是KVO的基础post

通知:是一种广播机制,在实践发生的时候,经过通知中心对象,一个对象可以为全部关心这个时间发生的对象发送消息,二者都是观察者模式,不一样在于KVO是被观察者直接发送消息给观察者,是对象间的直接交互,通知则是二者都和通知中心对象交互,对象之间不知道彼此编码

KVO使用:被观察着发生addobserver:forkeyPath:options:context:方法来添加观察者.而后只要被观察者的keypath值发生变化(注意单纯改变值不会调用此方法,只有经过getter和sett来改变值才会触发KVO),就会在观察者里调用方法observerValueForKeyPath:ofobject:change:context:所以实现此方法来对KVO发出的通知作出响应.server

这些代码都是秩序在观察者里进行实现,被观察者不用添加任何代码,因此谁要监听谁要注册,而后对响应进行处理便可,使得观察者与被观察者彻底解耦,运用很灵活很简便,可是KVO只能检测类中属性,而且属性名都是经过NSString来查找,编译器不会帮你检测对错和补全,纯手敲会比较容易出错对象

通知的使用:通知的发出是由通知中心来统一发出,而不一样通知经过惟一标示名notifcationName来区分,标示名由发送通知的类来起.首先被观察者本身在必要的方法A里,经过方法postNotificationName:object:发出通知notificationName这样发送通知着这边的工做就完成了,每次A被调用,就会发送一次通知notificationNamessl

而后谁要监听A的变化,就经过[NSNotificationCenter defaultCenter] 的方法addobserver:sslector:name:object为观察者注册监听name为notificationNmae的通知.get

每次发出name为notificationNmae的通知时,注册监听后的观察着就会调用其本身定义的方法notificationselector来进行相应编译器

NSNotification的特色,就是须要被观察者先主动发出通知,而后观察者注册监听后,再来进行响应,比KVO多了发送通知的一步,可是其优势是监听不局限属性的变化,还能够对多种多样的状态变化进行监听,监听范围广,使用灵活.io

相关文章
相关标签/搜索