KVO (Key-Value Observing) 的底层实现完全依赖于 Objective-C 的 Runtime(运行时)机制。其核心技术点就是你提到的 ISA-Swizzling(ISA 指针混写) 和 动态生成的中间类(Intermediate Class)。 下面我将分步骤详细解析 KVO 的底层原理: 1. 核心原理概述 当一个对象(假设为 ,类为 )的属性被注册观察()时,系统会在运行时动态地创建一个 类的子类(中间类),并将 对象的 指针指向这个新的子类。 这个子类重写了被观察属性的 方法,在赋值前后插入了通知代码,从而实现自动通知。 2. 详细实现步骤 第一步:动态生成中间类 (NSKVONotifyingClassName) 当你调用 时: 1. Runtime 会在内存中动态生成一个 的子类。 2. 这个子类的命名规则通常是: + (例如:)。 第二步:ISA-Swizzling (指针修正) 1. 系统将 对象的 指针从指向 类,修改为指向 类。 2. 结果:虽然这个对象表面上还是 (因为继承关系),但实际执行代码时,它使用的是 的方法列表。 第三步:重写...