美文网首页
iOS 面试汇总 - KVO

iOS 面试汇总 - KVO

作者: FunkyRay | 来源:发表于2018-03-22 16:53 被阅读84次

    KVO (Key-Value Observing)

    • KVO的全称是Key-Value Observing,俗称“键值监听”,可以用于监听某个对象属性值的改变。

    KVO 实现机制

    • 当你观察一个对象时,一个带有NSKVONotifying_前缀的类会动态被创建。这个类继承自该对象的原本的类,将并isa指针指向这个新的类;
    • 重写了setter方法,并在setter方法中调用了Foundation框架里的_NSSetIntValueAndNotify这个函数(该函数只有监听的是int类型的属性才会调用,监听不同类型的属性值会调用不同的_NSSet*ValueAndNotify函数,此只为了讲解过程举例);
    • _NSSetIntValueAndNotify这个函数中分别调用了KVC的willChangeValueForKey:、super的setter方法、以及KVC的didChangeValueForKey:;
    • didChangeValueForKey:方法中调用了observer observeValueForKeyPath:
    • 不仅如此,Apple 还重写了 -class 方法,企图欺骗我们这个类没有变,就是原本那个类;只能通过Runtimeobject_getClass()才能看到真正的类型;
    KVO 实现机制

    相关文章链接可以参考:http://tech.glowing.com/cn/implement-kvo/

    自定义KVO: https://github.com/liuleiai1/LL_KeyValueObserveDemo

    相关文章

      网友评论

          本文标题:iOS 面试汇总 - KVO

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