KVOController

KVO存在的问题

iOS原生KVO有诸多缺点安全

1. 须要手动在dealloc中移除观察者,不然会crash。重复remove,也会crashapp

2. 复写的观察者方法。post

3. 观察多个对象时,须要在方法中if else判断ui

4. 经过context判断上下文spa

KVOController结构

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

2. KVOController代码分析和踩坑

相关文章
相关标签/搜索