KVO
2016-01-21 本文已影响620人
明月钓无痕
KVO是指键-值-观察者(key-value-observe)是一种使对象获取其他对象的特定属性变化的通知机制。
与NSNotification 不同的是。KVO 不需要通知中心对象。而是在对象属性变化之后会直接通知观察者。KVO是基于KVC的。
KVO的步骤
**1. 注册观察者 **
为了正确接受属性的变化通知,观察者对象必须先发一个消息给被观察者对象
- (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(nullable void *)context;
/*
NSKeyValueObservingOptions 可选的是一个枚举值。我们通常用到的是两个
NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew
当属性发生变化时。我们可以把旧值和新值传递给观察者
*/
** 2.接受变化通知 **
应该注意的是如果只是使用成员变量改变值的话是不会触发KVO的。要使用点语法,或者是KVC的方式改变值
// object 是被监听对象
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary<NSString *,id> *)change
context:(void *)context;
** 3.移除观察者身份 **
在不需要观察时要进行移除, 若果没有
- (void)removeObserver:(NSObject *)observer
forKeyPath:(NSString *)keyPath;