KVOController

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

2. KVOController代码分析和踩坑



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值