Cocoa 关键价值观是如何在内部实施的? 我得到了关于这个问题的基础魔法的答案:

Cocoa 关键价值观是如何在内部实施的? 我得到了关于这个问题的基础魔法的答案:,cocoa,key-value-observing,foundation,internals,Cocoa,Key Value Observing,Foundation,Internals,有什么魔力?它是如何在内部工作的?因为使用框架很危险,我无法理解它的内部行为,所以我想知道它的行为。目前,如果没有任何方法定义,我无法理解它是如何工作的。苹果的描述了KVO是如何在内部实现的 其要点是,当您在对象上注册观察者时,框架会动态地创建对象原始类的子类,并调整对象以显示为这个新动态类的实例。如果在注册观察者后在调试器中检查对象,则可以看到这一点 这个新类截取到对象的消息,并检查它们是否匹配某些模式(例如getter、setter和collection访问)。简而言之:Objective-

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

苹果的描述了KVO是如何在内部实现的

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


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

简而言之:Objective-C2.0的@property声明为命名属性创建了访问器方法,因此存在方法定义@属性只是定义它们的一种简捷方法,它避免了大量重复的样板代码

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