美文网首页
KVO底层实现

KVO底层实现

作者: saiGo | 来源:发表于2016-09-09 09:44 被阅读15次

底层是监听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底层实现

      本文链接:https://www.haomeiwen.com/subject/yeseettx.html