@chenbinghua
2015-09-12T02:33:49.000000Z
字数 938
阅读 1785
iOS笔记
全名为:Key Value Observing,直译为:基于键值的观察者
大概就是一个对象可以监听另一个对象的成员变量的变化。
KVO的三个步骤
A监听B的name属性的改变
// B添加监听者[B addObserver:A forKeyPath:@"name" options: NSKeyValueObservingOptionOld context:nil];// A实现监听方法/*** 当监听到object的keyPath属性发生了改变*/- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{NSLog(@"监听到%@对象的%@属性发生了改变, %@", object, keyPath, change);}// 当A销毁时移除监听- (void)dealloc{[B removeObserver:self forKeyPath:@"name"];}
addObserver:forKeyPath:options:context:各个参数的作用分别是什么,observer中需要实现哪个方法才能获得KVO回调?
/*1 观察者,负责处理监听事件的对象2 观察的属性3 观察的选项,可以监听新值或旧值4 上下文*/addObserver:forKeyPath:options:context:// 所有的 kvo 监听到事件,都会调用此方法/*1. 观察的属性2. 观察的对象3. change 属性变化字典(新/旧)4. 上下文,与监听的时候传递的一致*/- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;
参考博客如何自己动手实现KVO
KVO 的实现也依赖于 Objective-C 强大的 Runtime
KVO的底层实现绝对是个黑魔法
