KVO

时间:2021-06-12 20:28:50
•基本概念

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.  建立一个孩子模型

KVO

2.建立一个护士模型

(1)

KVO

(2) 在.m文件里写

KVO