Key-Value Observing如何在内部实施?

时间:2011-03-22 04:34:03

标签: cocoa key-value-observing foundation internals

我为这个问题得到了关于基金会魔法的答案:What's the most *simple* way to implement a plain data object which conforms key-value-observing?

有什么神奇之处?它内部如何工作?因为使用我无法理解其内部行为的框架是危险的,所以我想知道它的行为。目前,如果没有任何方法定义,我无法理解它是如何工作的。

2 个答案:

答案 0 :(得分:9)

Apple的documentation描述了如何在内部实施KVO。

它的要点是,当您在对象上注册观察者时,框架会动态创建对象原始类的子类,并调整对象以显示为此新动态类的实例。如果在观察者注册后检查调试器中的对象,则可以看到这一点。

这个新类拦截对象的消息,并检查它们是否匹配某些模式(例如getter,setter和collection访问)。

答案 1 :(得分:3)

简而言之:Objective-C 2.0的@property声明为命名属性创建了访问器方法,因此方法定义。 @property只是定义它们的简便方法,它避免了大量重复的样板代码。

当您观察属性时,会创建一个私有子类,该子类实现在更改属性值之前和之后调用相应通知方法的访问器。然后使用称为“isa swizzling”的技术来改变观察对象的类别。