iOS 面试汇总 - KVO

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()才能看到真正的类型;
iOS 面试汇总 - KVO_第1张图片
KVO 实现机制

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

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

你可能感兴趣的:(iOS 面试汇总 - KVO)