KVO存在的问题
iOS原生KVO有诸多缺点。
1. 需要手动在dealloc中移除观察者,否则会crash。重复remove,也会crash
2. 复写的观察者方法。
3. 观察多个对象时,需要在方法中if else判断
4. 通过context判断上下文
KVOController结构
FB开源的KVOController完美的解决了上述的问题
FBKVOController:负责管理Observer(观察者)和Subject(被观察者)。其中lock保证FBKVOController的线程安全
_FBKVOInfo:保存KVO相关的所有信息;keyPath,option,context,_block,state。复写了isEqual:和hash方法,使用keyPath来判断。
_FBKVOSharedController:单例。实现系统KVO的方法,自己作为observer,监听subject,并从FBKVOInfo中取出subject的信息。负责最后的监听的实现
参考:
1. 如何优雅地使用 KVO