KVO全称为Key-Value Observing, 即键值监听,用于指定对象属性值的改变。
定义如下一个Person类:
1 | @interface Person : NSObject |
给Person类的instance对象添加KVO:
1 | // 给person1对象添加KVO监听 |
当给Person的instance对象添加KVO监听后,Runtime会动态创建一个名为NSKVONotifying_Person的Person子类,并将instance对象的isa指针指向这个子类Class。
NSKVONotifying_Person类的setAge:方法的伪代码如下:
1 | - (void)setAge:(int)age |
其他方法如下:
1 | // 屏蔽内部实现,隐藏了NSKVONotifying_Person类的存在 |
由此可见,直接修改成员变量的值不会触发KVO。