美文网首页
KVO原理图解

KVO原理图解

作者: Jorunk | 来源:发表于2019-05-05 15:04 被阅读0次
    KVO

    KVO是通过isa-swizzling技术实现的(这句话是整个KVO实现的重点)。

    在运行时根据原类创建一个中间类,这个中间类是原类的子类,并动态修改当前对象的isa指向中间类。

    并且将class方法重写,返回原类的Class。

    所以苹果建议在开发中不应该依赖isa指针,而是通过class实例方法来获取对象类型。

    流程:

    1.当某个类的对象第一次被观察时,系统就会在运行期动态地创建该类的一个派生类,在这个派生类中重写基类中任何被观察属性的 setter 方法。
    2.派生类在被重写的 setter 方法中实现真正的通知机制,就如前面手动实现键值观察那样。这么做是基于设置属性会调用 setter 方法,而通过重写就获得了 KVO 需要的通知机制。当然前提是要通过遵循 KVO 的属性设置方式来变更属性值,如果仅是直接修改属性对应的成员变量,是无法实现 KVO 的。
    3.同时派生类还重写了 class 方法以“欺骗”外部调用者它就是起初的那个类。然后系统将这个对象的 isa 指针指向这个新诞生的派生类,因此这个对象就成为该派生类的对象了,因而在该对象上对 setter 的调用就会调用重写的 setter,从而激活键值通知机制。此外,派生类还重写了 dealloc 方法来释放资源

    参考原文:https://blog.csdn.net/null959_/article/details/81262391

    相关文章

      网友评论

          本文标题:KVO原理图解

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