美文网首页
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