4

随着对 KVO 和 KVC 的了解越来越多,我变得好奇了——

NSObject 在访问 setter 方法时如何提供自动 KVO?

如果我使用名为 setName 的访问器创建一个新对象,

当有人打电话时,观察者如何得到通知

[obj setName:@"神秘"];

感谢您的任何反馈

4

1 回答 1

11

我总是向人们解释“在 Cocoa 中没有什么是魔法;它只是代码”。但 KVO 近乎魔法。它被称为 isa-swizzling。您的类在运行时(任何人第一次观察您)转换为动态生成的子类,该子类重载所有 getter 和 setter。调用被连线欺骗你并返回旧类,所以如果你直接查看指针-class,除了在调试器中你不会看到魔术子类。isa

注意到 KVO 一定很奇怪是 Cocoa 启蒙的重要一步。恭喜。

Key-Value Observing 实现细节

于 2009-08-20T15:53:38.433 回答