美文网首页
第九章、KVO&KVC相关

第九章、KVO&KVC相关

作者: Evans_Xiao | 来源:发表于2019-08-09 21:44 被阅读0次

    一、为什么都俗称KVO技术为黑魔法

    内部神秘、外观简洁。

    二、阐述系统KVO的实现原理

    当观察一个对象时,一个新的类(NSKVONotifying_A)会动态被创建。这个类继承自该对象的原本的类,并重写了被观察属性的setter方法。重写的setter方法会负责在调用原setter方法之前和之后,通知所有观察对象值的更改。最后把这个对象的isa指针(isa指针告诉runtime系统这个对象的类是什么)指向这个新创建的子类,对象就神奇的变成了新创建的子类的实例。

    简而言之,KVO是系统关于观察者模式的一种实现;KVO运用了isa混写技术的runtime来动态的为某一个类添加一个子类,重写setter,同时将原有的isa指针重新指向新的类。

    三、谈谈KVO的本质

    当一个对象使用了KVO监听,iOS系统会修改这个对象的isa指针,改为指向一个全新的通过runtime动态创建的子类,子类拥有自己的setter方法实现,setter方法实现内部会顺序调用如下方法实现:
    1、willChangeValueForKey方法、
    2、原来的setter方法实现、
    3、didChangeValueForKey方法,而didChangeValueForKey方法内部又会调用监听器的observeValueForKeyPath:ofObject:change:context:监听方法。

    四、关于手动触发KVO

    被监听的属性的值被修改时,就会自动触发KVO。如果想要手动触发KVO,则需要我们自己调用willChangeValueForKeydidChangeValueForKey方法即可在不改变属性值的情况下手动触发KVO,并且这两个方法缺一不可。

    相关文章

      网友评论

          本文标题:第九章、KVO&KVC相关

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