KVO
Person 类的对象p 注册监听。
原理:注册监听后,系统利用runtime动态生成一个新的子类NSKVONotifying_Person对象,且将p->isa = NSKVONotifying_Person. 新的类重写set方法和class方法。
在set方法中,先调用willChangeValueForKey, 然后赋值,最后didChangeValueForKey出发监听的方法。
NSKVONotifying_Person ->superClass = Person
NSKVONotifying_Person->isa = meta-NSKVONotifying_Person
想手动调用监听方法:可以先调用willChangeValueForKey, 再调用didChangeValueForKey即可
KVC
下图是KVC获取属性和设置属性的调用原理图,例如[p setValue:21 forKey:@“age”],找到set方法,因为声明了一个age属性,所以通过setAge方法找到,并赋值后触发监听。如果没有age属性,则不会触发监听。




