-
KVO的全称是Key-Value Observing,俗称“键值监听”,可以用于监听某个对象属性值的改变。
-
未使用KVO监听的对象,instance对象的isa指针会指向class对象,class对象中包括对象方法setAge:和 age。
- 使用了KVO监听的对象
1、instance对象的isa指针会指向一个由Runtime动态创建的继承自class对象的子类(NSKVONotifying_cls
),NSKVONotifying_cls类对象会重写父类class对象的set方法、class方法、dealloc方法、_isKVOA方法的实现
2、当修改instance对象的属性时,set方法内部会调用Foundation的_NSSet**ValueAndNotify
函数,函数内部会调用willChangeValueForKey:
、父类原来的setter实现
、didChangeValueForKey:
3、didChangeValueForKey:内部会调用observer的observeValueForKeyPath:ofObject:change:context:
方法
- 手动调用willChangeValueForKey和didChangeValueForKey可以手动触发KVO。
- 直接修改成员变量
不会
触发KVO