KVO 实现原理

  • KVO是基于 runtime 机制实现的。
  • 当某个类的属性对象第一次被观察时,系统就会在运行期动态的创建该类的一个派生类,在这个派生类中重写基类中任何被观察属性的 setter 方法。派生类在被重写的 setter 方法内实现真正的通知机制。
  • 如果原类为 Person ,那么生成的派生类名为 NSKVONotifying_Person。
  • 每个类对象中都有一个 isa 指针指向当前类,当一个类对象的第一次被观察,那么系统会偷偷将 isa 指针指向动态生成的派生类,从而在给被监控属性赋值时执行的是派生类的 setter 方法。
  • 键值观察通知依赖于 NSObject 的两个方法:willChangeValueForKey: 和 didChangeValueForKey: ;在一个被观察属性发生改变之前,willChangeValueForKey: 一定会被调用,这就会记录旧的值。而当改变发生后,didChangeValueForKey: 会被调用,继而 observeValueForKey:ofObject:change:context: 也会被调用。
  • KVO 的这套实现机制中苹果还偷偷重写了 class 方法,让我们误以为还是使用的当前类,从而达到隐藏生成的派生类。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 作者:wangzz原文地址:http://blog.csdn.net/wzzvictory/article/det...
    反调唱唱阅读 1,179评论 0 5
  • KVC 什么是KVC KVC是Key-Value-Coding 的简称。 KVC是一种可以直接通过字符串的名字ke...
    Jack_deng阅读 1,211评论 0 0
  • KVO KVO 是 Key-Value-Observing 的简称。 KVO 是一个观察者模式。观察一个对象的属性...
    louuXinnn阅读 442评论 0 0
  • 一、概述 二、KVO基本原理 1.KVO是基于runtime机制实现的2.当某个类的属性对象第一次被观察时,系统就...
    ForScanf阅读 787评论 0 0
  • 前言 Key-Value-Observer,它来源于观察者模式, 其基本思想(copy于某度)是一个目标对象管理所...
    CholMay阅读 3,558评论 6 18

友情链接更多精彩内容