什么时候调用observeValueForKeyPath?

时间:2015-07-06 00:49:03

标签: objective-c swift

是否在更改属性后调用它(意味着属性setter已从调用堆栈中弹出)或属性setter正在执行?

斯威夫特非常方便"Property observers"。 Obj-C对KVO有类似的东西吗?

2 个答案:

答案 0 :(得分:3)

这取决于添加观察者时使用的选项。如果观察者添加了NSKeyValueObservingOptionPrior,则在更改属性之前和之后都会调用-observeValueForKeyPath:...。或者,更准确地说,它在-willChange...期间和-didChange...方法期间都会被调用。

如果使用<{1}} ,则仅在更改属性后调用NSKeyValueObservingOptionPrior。 (在-observeValueForKeyPath:...方法期间。)

Swift财产观察员与KVO并不相似。相反,它们更像是自己实现属性设置器(或者在子类中覆盖它),并在实际更改支持该属性的实例变量之前和/或之后执行某些操作(或调用到超级)。

我建议不要编写一个在自己的属性上使用KVO来响应更改的类。相反,它应该实现setter在属性更改时执行某些操作。

答案 1 :(得分:-2)