美文网首页
FBKVOController 的使用

FBKVOController 的使用

作者: chaeyeonyanse | 来源:发表于2021-05-31 21:21 被阅读0次

    系统 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方法,移除所有的观察者

    相关文章

      网友评论

          本文标题:FBKVOController 的使用

          本文链接:https://www.haomeiwen.com/subject/lspbsltx.html