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