KVO的实现原理

作者: 喜剧收尾_XWX | 来源:发表于2021-01-10 14:41 被阅读0次

    一、底层实现步骤

    需求:观察对象Person,观察属性name

    1. 利用runtime动态创建(objc_allocateClassPairPerson_A 类,继承自Person
    2. 设置Person对象的指针指向Person_A
    3. 检测Person_A的方法列表methodList中是否有setName:方法,如果没有就动态添加(class_addMethod)重写的setter方法。
    4. kvo_setter方法中利用setter方法取出getter方法,并获得旧值。
    5. kvo_setter中通过objc_msgSendSuper发送新的value值
    6. 在给Person_A添加观察者时候会动态创建(objc_setAssociatedObjectObservers对象的数组,每个数组的元素中包含观察对象、观察属性、新旧值等信息
    7. Person_A的setter方法里会进行异步回调,通知观察者
    8. Person某个属性移除观察时,则在Observers中移除该条记录。

    二、手动实现一个kvo

    上代码:https://gitee.com/XingweixinJoker/objc-kvo.git

    相关文章

      网友评论

        本文标题:KVO的实现原理

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