[关闭]
@chenbinghua 2015-09-12T10:33:49.000000Z 字数 938 阅读 1574

iOS开发之KVO

iOS笔记


容芳志专栏 Objective-C语法之KVO的使用
如何自己动手实现KVO

什么是KVO

全名为:Key Value Observing,直译为:基于键值的观察者
大概就是一个对象可以监听另一个对象的成员变量的变化
KVO的三个步骤
A监听B的name属性的改变

  1. // B添加监听者
  2. [B addObserver:A forKeyPath:@"name" options: NSKeyValueObservingOptionOld context:nil];
  3. // A实现监听方法
  4. /**
  5. * 当监听到object的keyPath属性发生了改变
  6. */
  7. - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
  8. {
  9. NSLog(@"监听到%@对象的%@属性发生了改变, %@", object, keyPath, change);
  10. }
  11. // 当A销毁时移除监听
  12. - (void)dealloc
  13. {
  14. [B removeObserver:self forKeyPath:@"name"];
  15. }

阳神博客的一道题

addObserver:forKeyPath:options:context:各个参数的作用分别是什么,observer中需要实现哪个方法才能获得KVO回调?

  1. /*
  2. 1 观察者,负责处理监听事件的对象
  3. 2 观察的属性
  4. 3 观察的选项,可以监听新值或旧值
  5. 4 上下文
  6. */
  7. addObserver:forKeyPath:options:context:
  8. // 所有的 kvo 监听到事件,都会调用此方法
  9. /*
  10. 1. 观察的属性
  11. 2. 观察的对象
  12. 3. change 属性变化字典(新/旧)
  13. 4. 上下文,与监听的时候传递的一致
  14. */
  15. - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;

底层实现

参考博客如何自己动手实现KVO
KVO 的实现也依赖于 Objective-C 强大的 Runtime
KVO的底层实现绝对是个黑魔法

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注