KVOController简析

关于KVO的使用,最常用的一个类库就是FB的KVOController了,还有一个HTBKVObservation,是解决了FB的循环引用的问题,但是后来FB的循环引用问题解决了。现在我们来简单看看这两者的实现方式。

实现

其实两者的思想都是一样的,都是增加一个第三者,将消息处理和清理工作交给第三者进行。其中FB是利用了associate object是随着本身对象的释放而释放的特性来清理KVO的,而HTB则是利用hook dealloc方法进行清理的。

HTB的实现比较简单,所有东西都被放在了HTBKVObservation中,而FB则分为3个部分FBKVOController_FBKVOSharedController_FBKVOInfo。为什么FB会分为这么多部分,我认为是为了分离职责,但是个人觉得没有必要进行集中管理,除非想要撤销所有KVO的功能,但是我觉得不可能会有这个功能吧。

清理

FB存在一个问题,那就是被观察对象被释放了,观察者可能并没有被移除,因为外部可能会持有KVOController,但是这样好像并没有什么大问题,因为被观察者释放了也就不会有KVO的消息了。

HTB则是在被观察者dealloc的时候强制移除所有KVO。

Reactive

Reactive中也有类似的实现,思想其实还是一致的,只是把释放交给了dispose这个单独概念。

总结

在这几个方案中,可以想到很多类型的问题都可以利用这种第三者的思路来解决,其实还有很多开源库也是利用该方案解决的。

另外在扩展的时候也不要一股脑的往NSObject上堆方法,利用第三者来处理这些方法可能会更加的优雅。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容