KVO Key Value Observing 基于键值的观察者
2014-07-11 10:34
423 查看
KVO Key Value Observing 直译为: 基于键值的观察者.它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知.简单的说就是每次指定的被观察的对象的属性被修改后, KVO 就会自动通知相应的观察者了.
与 NSNotification (通知)不同,键值观察中并没有所谓的中心对象来为所有观察者提供变化通知.取而代之地,当有变化发生时,通知被直接发送至处于观察状态的对象. NSObject 提供的这种基础的键-值观察实现方法.\
你可以观察任意对象属性,包括简单属性,对一或对多关系.对多关系的观察者将会被告知发生变化的类型-也就是任意发生变化的对象.
键-值观察为所有对象提供自动观察兼容性.你可以通过禁用自动观察通知并实现手动通知来筛选通知.
//这里用小孩和保姆的例子 在小孩类中使用 set 方法修改属性值,或KVC 才能触发 KVO
//保姆用 KVO (现实化就理解成婴儿监护器[婴儿对讲机])或(一个可以响的铃铛)
,如果 KVO 有反应了 保姆就去照顾小孩
-(id)initWithChildren:(Children *)children { //重写初始化方法 //这里相当于一个事件,下面还要写个方法.
self = [super init];
if (self != nil){
_children = children
//观察小孩的 happyValue 值
//使用 KVO 为_ children 对象添加一个观察者,用于监听 happyValue 属性值是否被修改了.
[_children addObserver:self forKeyPath:@"happyValue"
options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld //监听新值和旧值, 根据工程需要,一般值监听新值就可以了
context:NULL];
}
return self
}
//KVO 触发的方法.happy 值如果被修改了,则调用此方法.
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
blah blah blah
如果是多个参数,用 if 判断
if([keyPath isEqualToString:@"happyValue"])
{ blah blah blah }
else if([keyPath isEqualToString:@"hungryValue"])
{ blah blah blah }
与 NSNotification (通知)不同,键值观察中并没有所谓的中心对象来为所有观察者提供变化通知.取而代之地,当有变化发生时,通知被直接发送至处于观察状态的对象. NSObject 提供的这种基础的键-值观察实现方法.\
你可以观察任意对象属性,包括简单属性,对一或对多关系.对多关系的观察者将会被告知发生变化的类型-也就是任意发生变化的对象.
键-值观察为所有对象提供自动观察兼容性.你可以通过禁用自动观察通知并实现手动通知来筛选通知.
//这里用小孩和保姆的例子 在小孩类中使用 set 方法修改属性值,或KVC 才能触发 KVO
//保姆用 KVO (现实化就理解成婴儿监护器[婴儿对讲机])或(一个可以响的铃铛)
,如果 KVO 有反应了 保姆就去照顾小孩
-(id)initWithChildren:(Children *)children { //重写初始化方法 //这里相当于一个事件,下面还要写个方法.
self = [super init];
if (self != nil){
_children = children
//观察小孩的 happyValue 值
//使用 KVO 为_ children 对象添加一个观察者,用于监听 happyValue 属性值是否被修改了.
[_children addObserver:self forKeyPath:@"happyValue"
options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld //监听新值和旧值, 根据工程需要,一般值监听新值就可以了
context:NULL];
}
return self
}
//KVO 触发的方法.happy 值如果被修改了,则调用此方法.
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
blah blah blah
如果是多个参数,用 if 判断
if([keyPath isEqualToString:@"happyValue"])
{ blah blah blah }
else if([keyPath isEqualToString:@"hungryValue"])
{ blah blah blah }
相关文章推荐
- iOS---KVO(Key Value Observing) 观察者模式之解析与应用
- iOS学习笔记05—Key-Value-Observing(KVO,键值观察)
- KVO(Key-Value-Observer)键值观察者
- Key-Value-Observing(KVO,键值观察)
- UI28_KVO(key-value-observer键值观察者) 通知中心
- 观察者模式的具体应用——通知(notification)机制和KVO(Key-Value-Observing)机制
- ViewController之间通讯KVO(key value observing)键值观察模式
- KVO(key value observing)的使用
- 键值观察 Key-Value Observing Programming Guide
- KVO(Key Value Observing)
- iOS开发笔记之基于键值的观察者模式(KVO)
- KVO(NSKeyValueObserving 键 - 值编码)与KVC(NSKeyValueCoding 键值观察机制)详解
- 8观察者模式( kvo基于键值 和Notification通知)
- iOS--基于键值的观察者模式(KVO)
- KVO(NSKeyValueObserving 键 - 值编码)与KVC(NSKeyValueCoding 键值观察机制)详解
- KVC(key value coding)/ KVO(key value observing)
- KVC(key value coding)/ KVO(key value observing)
- iOS概念之KVO(Key-Value Observing)
- 45.KVO(Key-Value-Observer)键值观察者
- iOS开发7-KVO(Key-Value Observer)键值观察