Key Value Observing, 键值观察者。它提供一种机制,当指定的对象的属性被修改后,则对象就会接收到通知。
与NSNotification不同,键值观察中并没有中心对象来为所有的观察者提供变化通知,取而代之,当有变化发生时,通知被直接发送至处于观察状态的对象。NSObject提供这种基础的键值观察实现方法
KVO 注册观察者
为了正确接收属性的变更通知,观察对象必须首先发送一个addObserver:forKeyPath:options:context:消息至被观察对象。用以传送观察对象和需要观察的属性的路径
NSKeyValueObservingOptionOld选项可以将初始对象值,以变更字典中的一个项形式提供给观察者。指定NSKeyValueObservingOptionNew选项将新的值以一个项的形式添加到变更字典,可以采用”|”来指定接收上述两种类型的值
[child addObserver:self forKeyPath:@”tired” options:NSKeyValueObservingOptionOldNSKey|ValueObservingOptionNew
context:nil];
KVO 接收变更通知
当对象的一个被观察属性发生变动时,观察者收到一个observeValueForKeyPath:ofObject:change:context消息。所有观察者都必须实现这一方法oberveValueForKeyPath。
-(void) :(NSString*)keyPath ofObejct:(id)object change:(NSDictionary *)change context:(void *)c{
if([keyPth isEqual:@”key”]) {
NSLog(@”%@”,change);
}
}
KVO 移除观察者身份
你可以发送一条指定观察方对象和建路径的removeObserver:forKeyPath:消息至被观察的对象,来移除一个键-值观察者(一般放在dealloc方法里面)
[child removeObserver:self forKeyPath:@”key”];
KVO 案例
1. 建立一个孩子模型
2.建立一个护士模型
(1)
(2) 在.m文件里写