美文网首页
KVO 和 KVC

KVO 和 KVC

作者: 求长生 | 来源:发表于2020-06-14 22:06 被阅读0次

    ~ KVO的本质?
    在iOS中是观察者模式的一种表现。我们可以使用KVO让某个对象成为另外一个对象的监听者。当被监听对象的属性发生改变时,KVO就会通知监听者。KVO的是通过一种叫isa-swizzling的技术实现的。(类似runtime的method swizzling,runtime进行方法互换的一种黑魔法。)

    ~ KVO的底层实现
    1.监听者调用监听的方法。
    2.被监听者派生一个中间类。被监听对象的isa指针指向派生类
    3.被监听的属性发生变化,由中间类触发监听通知(具体方式未知)。
    4.监听者收到通知。触发observeValueForKey:ofObject:change:context:

    ~ 如何手动触发KVO?
    手动调用willChangeValueForKey:和didChangeValueForKey:。

    ~ 直接修改成员变量会触发KVO么?,通过KVC修改属性会触发KVO么?直接修改成员变量不会触发KVO。
    通过KVC修改属性会触发KVO。

    ~ KVC的原理?
    KVC键值编码,可以直接通过key(字符串的名字)来间接访问属性的机制。可以在运行时动态地访问和修改对象的属性。而不是在编译时确定。

    ~ KVC的底层实现
    当一个对象调用setValue forKey方法时,方法内部会做以下操作:
    1.检查是否存在相应setkey的方法,如果存在,就调用set方法。
    2.如果set方法不存在,就会查找与setkey相同名称并且带下划线的成员属性,如果有,则直接给成员属性赋值。
    3.如果没有找到_key,就会查找相同名称的属性iskey,如果有就直接赋值。
    4.如果还没找到,则调用valueForUndefinedKey:和setValue:forUndefinedKey:方法。

    [iOS面试题库——KVC与KVO]
    (https://blog.csdn.net/yuwuchaio/article/details/80701681)

    相关文章

      网友评论

          本文标题:KVO 和 KVC

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