您的位置:首页 > 产品设计 > UI/UE

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   }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: