如何观察NSObject属性的变化

Ami*_*Sri 6 cocoa properties key-value-observing nsobject

我有NSObject的子类有70个属性,我需要观察所有这些属性的变化,而不是使用以下方法逐个添加每个属性:

[self addObserver: self
       forKeyPath: @"propertyname"
          options: NSKeyValueObservingOptionNew
          context: NULL];
Run Code Online (Sandbox Code Playgroud)

.请让我知道最简单的方法.现在,我需要10.5及更高版本的解决方案.

Amy*_*all 10

您可以使用objective-C运行时函数class_copyPropertyList()来获取该类的所有属性,然后遍历列表并使用property_getName()以获取应该使用键值观察的内容.

或者您可以keyPathsForValuesAffectingValueForKey:在相关课程上实施.在课堂上创建一个新密钥,我们只会用于变更检测.然后实现上面的方法,如果传入的字符串等于你的新键,则返回一个包含所有70个属性名称的集合.然后你可以在你的新密钥上做KVO,当有任何变化时你会收到通知.这样做,你不会知道哪个属性发生了变化,只是其中一个属性发生了变化.

它可能有助于告诉我们为什么需要这样做,因为可能有更好的设计模式可供使用.