FBKVOController 的使用

系统 KVO 实现的替代方案
优势
1、不用手动移除观察者了
2、 不允许多次 addObserver 同一个 keypath
3、方便使用

实现流程
NSObject 有分类,添加了KVOController属性
vc(observer) 持有一个 KVOController,
KVOController 持有一个 observer(weak),一个_objectInfosMap , 一个互斥锁,锁在 读写_objectInfosMap时使用,保证线程安全
_objectInfosMap 类比 NSDictionary
key 为被观察的对象,比如_tb,
value 为一个 Set ,里面包含 _FBKVOInfo 对象,每一个对象代表一个独一无二的 keypath,这里保证了不能对同一个 keypath 多次观察
info 作为 context,传入addObserver:forKeyPath:options: context:的方法里,
在观察方法回调里,根据这个 context,找到是哪个 info(从而知道是哪个 keypath)
从而找到 info 的 block,进行回调
vc dealloc 以后,KVOController也会 dealloc,里面有unobserveAll方法,移除所有的观察者

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • KVO 作为 iOS 中一种强大并且有效的机制,为 iOS 开发者们提供了很多的便利;我们可以使用 KVO 来检测...
    JzRo阅读 1,012评论 0 2
  • 测试Github地址 简介 简单来说就是可以通过KVO监听对象属性的变化。 使用 我们简单的写一个model类:P...
    Arnold134777阅读 518评论 0 0
  • 该文章属于刘小壮原创,转载请注明:刘小壮[https://www.jianshu.com/u/2de707c93d...
    刘小壮阅读 48,731评论 35 227
  • KVO 作为 iOS 中一种强大并且有效的机制,为 iOS 开发者们提供了很多的便利;我们可以使用 KVO 来检测...
    Draveness阅读 6,943评论 11 59
  • KVO,全称为Key-Value observing,中文名为键值观察,KVO是一种机制,它允许将其他对象的指定属...
    辉辉岁月阅读 1,654评论 0 1