2011-03-22 72 views

回答

9

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

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

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

3

简而言之:Objective-C 2.0的@property声明为named属性创建访问器方法,所以方法定义。 @property只是定义它们的简便方法,它避免了许多重复的样板代码。

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