1.首先附上 FBKVO 地址 https://github.com/facebook/KVOController
2.再附上小弟Demo 地址 https://github.com/sfmDev/DemoForFBKVO
KVOController是FaceBook开源的一个使用KVO的开源库;
好处如下:
1使用 Blocks、自定义 Actions 或者 NSKeyValueObserving 回调进行通知.
2观测者移除时无异常
3控制器 dealloc 时隐式的观测者移除
4提升使用 NSKeyValueObservingInitial 的性能
5线程安全
这也是我从网上找的,还在进一步深究中.
简单的可以参见 demo ,主要说一下使用.
fbKVO = [FBKVOController controllerWithObserver:self];
[fbKVO observe:personOne keyPath:@"pName" options:NSKeyValueObservingOptionNew block:^(id observer, id object, NSDictionary *change) {
lbl.text = change[NSKeyValueChangeNewKey];
}];
先说一下KVO 值检测机制
1 NSKeyValueObservingOptionNew 传递变化之后的值;
2 NSKeyValueObservingOptionOld 传递变化之前的值;
3 NSKeyValueObservingOptionInitial 观察者会在程序初始时,也就是观察变化之前,优化执行一次 观察动作;即上述执行上面 block操作一次;并且传递 默认的值,和以后传递 变化后的值;
4 NSKeyValueObservingOptionPrior 会调用两次观察者操作,值改变之前,值改变之后;
然后不太明白的可能是 change[NSKeyValueChangeNewKey]这里
change[NSKeyValueChangeNewKey] 新值;
change[NSKeyValueChangeOldKey] 旧值;
安装
使用 CocoaPods,添加下列代码到项目 Podfile 文件:
pod 'KVOController'
官方的 demo 可以仔细研究一下,可以加深对 KVO 机制的理解.