KVO学习

75 阅读1分钟

一.本质: 1.利用RuntimeAPI动态生成一个子,并且让instace对象的isa指向这个全新的子类

如图:创建一个Person类,并设置一个age属性 截屏2022-03-13 下午4.04.22.png

接着在ViewController里面创建一个person1,对age属性监听。从打印结果可以看出person1的isa指针发生了改变,指向了NSKVONotifying_Person,而且NSKVONotifying_Person的父类为Person 截屏2022-03-13 下午4.25.06.png

2.当修改instance属性的对象时,会调用Foundation的_NSSetAgeValueAndNotify函数。NSSetAgeValueAndNotify会调用以下三个方法: (1)willChangeValueForKey: (2)父类的setter方法: (3)didChangeValueForKey:,在这个方法里面会调用- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context