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()
才能看到真正的类型;
网友评论