学习资料:
这里是苹果官方关于KVO的文档:KVO
OBJC中国
一 首先从啥是KVO开始
kvo ,即key-value-observing(即键值观察),是苹果提供的一套事件通知机制。允许对象监听另一个对象属性的改变并且在属性值改变的时候接受到通知。一般继承自NSObject 的类都支持KVO。
使用KVO的前提:
这个类必须支持KVC(KVC 跟KVO的关系),支持跟KVC相同的数据类型。
1 kvo的用法和使用场景
(1)使用KVO
分为三个步骤:
1 :注册成为观察者。使用API:
- (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(nullable void *)context;
2:实现回调方法:使用API:
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
keypath 属性发生变化的时候回回调这个方法通知观察者。
3 当观察者不需要监听或者观察者销毁前,需要调用
- (void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath;
这个方法需要在观察者销毁前调用,不然会crash。
(2)注册事件
- (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(nullable void *)context;
这个注册方法参数options是一个枚举值,传入不同的值会有不同的观察效果:
NSKeyValueObservingOptionNew//接收新值,默认是接收新值
NSKeyValueObservingOptionOld//接收旧值
NSKeyValueObservingOptionInitial//在注册观察者之后立即接收一次通知
kvo 对观察者不会强引用。
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object