KVO底层原理

KVO本质

在修改对象属性调用set方法的时候会利用RuntimeAPI动态生成该对象的子类,并且让该对象的isa指针会指向这个全新的子类的类对象,拿 Person对象举例,生成的子类为NSKVONotifying_Person,同时会调用类对象中Foundation_NSSetXXXValueAndNotify函数,里面具体会实现三个方法willChangeValueForKey,父类原来的setter方法,didChangeValueForKey内部会触发监听器(Observe)的监听方法(observeValueForKeyPath:ofObject:change:context:

如何手动触发KVO

手动调用willChangeValueForKey,didChangeValueForKey

直接修改成员变量会触发KVO

修改成员变量不会触发KVO,只有修改对象的属性或者用kvc才会。

你可能感兴趣的:(KVO底层原理)