1、概念:
所谓键值观察者,是一个对象获取其他对象特定属性变化的通知机制。看上去KVO同通知机制类似,而不同点在于KVO没有提供一个所谓的通知中心为所有的观察者提供变化通知,而是当变化发生时,通知直接送达正在观察的对象。
2、键值观察者模式的实现:
(1)注册观察者:
观察对象发送消息到被观察对象,以建立二者的观察关系:
- (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context;
keyPath所指的是被观察对象的属性名,用字符串表示。
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;
需要注意的是,keyPath所表示的属性,必须使用setter方法或者kvc方法改变值的时候才会调用kvo的观察响应函数,直接在类的内部改变属性的值,kvo方法无效。
(3)移除观察者:
- (void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath;移除之后,对象属性的变化将不会再引发响应函数的调用。