KVO的原理

141 阅读1分钟

实现原理

KVO是通过isa-swizzling(isa混写)实现的。
系统在运行时根据原类创建一个中间类NSNotifying_XXX,这个中间类是原类的子类(所以调用原类的方法时,能找到对应方法),并动态修改当前对象的isa指针指向中间类。
当修改对象属性时,会先调用willChangeVlaueForKey:方法,再对实例变量赋值,再调用didChangeValueForKey:方法。