底层是监听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底层实现
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 首先声明 我的标题本身就是个伪命题!!! KVC 与 KVO 的关系 就好比雷锋和雷峰塔的关系 标题就是为了吸引小...
- 前言 怎么看待励志的书籍?看再多,那都是别人的人生 一、KVO介绍 KVO(键值监听 Key-Value Obse...
- 前言 KVO的用法前面已经讲过了,不懂得可以去看我的KVC、KVO探识(一),希望会对你有帮助。今天主要讲KVC、...
- [作者]:贾庆 [课程导师]:刘艳 [导图解说]:这一幅记录了我自己一天的思维导图,分上午、中午、下午、晚上四个版...