KVO底层实现

底层是监听set方法
当调用addObserver: forKeyPath: options: context:的时候,将观察者保存到当前要观察的对象,具体是调用objc_setAssociatedObject(self, (__bridge const void *)(observerKey),observer,OBJC_ASSOCIATION_RETAIN_NONATOMIC);
observerkey就是用来保存观察者的key,然后将要观察对象的isa指针指向到要观察对象的派生子类.
然后在派生子类的set方法先恢复父类的方法,然后在里面用objc_getAssociatedObject(self, observerKey)获取到观察者,然后让观察者调用observeValueForKeyPath:@"name" ofObject:self change:nil context:nil

你可能感兴趣的:(KVO底层实现)