键-值观察(KVO模式)

来源:互联网 发布:深圳淘宝运营助理招聘 编辑:程序博客网 时间:2024/05/14 15:51

总体来说,KVC就是通过变量名来修改和读取变量值的一种方法。

键-值观察KVO在这些值发生变化的时候通知开发者

1、添加一个观察者(一个对象的监听者(注册代理)):

 -(void)addObserver:(NSObject *)anObserver forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context

对象的KeyPath上发生变化时将通知观察者

options定义了发送消息时需要包含的内容,可以是发送旧值(改变前)和新值(改变后)

context变量指需要与其他消息一起发送的数据指针


2、实现观察,当发生改变时,观察者接受到下列消息

-(void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

change是可能包含旧值或者新值的字典

context如果在注册时不为空,那么这里将接受到值


3、当观察结束之后,可以执行以下方法移除观察者

[a removeObserver:self forKeyPath:@"change"];

需要注意的时,在KVO中,需要谨慎使用context指针,因为任何键值观察的观察者,都是用特定的方法observeValueForKeyPath: ofObject: change: context:来实现,所以就可能错误的将其他观察者的消息截留下来,发生错误

解决这种错误的方法一般是使用特定的指针作为context参数的值。

0 0