何时调用watchValueForKeyPath?

Dav*_*Liu 5 objective-c swift

更改属性(意味着属性设置器已经从调用堆栈中弹出)之后或执行属性设置器时会调用它吗?

斯威夫特很方便"Property observers"。Obj-C对于KVO是否有类似的东西?

Ken*_*ses 3

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

如果NSKeyValueObservingOptionPrior使用,则-observeValueForKeyPath:...仅在属性更改后调用。(在-didChange...方法过程中。)

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

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