为什么要使用addObserver的上下文变量:forKeyPath:options:context:

时间:2012-02-27 23:27:25

标签: objective-c macos

我一直在使用addObserver:forKeyPath:options:context:在我的代码中相当多,并且一直将它的“context”部分设置为nil。我看到很多人都使用过“背景”的例子,但很难掌握原因。如果您有多个对象观察密钥,并且想要确定哪个对象在密钥更改时应该响应,这会有帮助吗?如果是这样,那是唯一的原因吗?

谢谢

1 个答案:

答案 0 :(得分:3)

拥有唯一上下文的最大原因是处理子类(或超类)也在观察同一个keyPath的情况。如果你知道这个观察是你的,你可以退出观察者。但是,如果它属于其他人,你应该将它传递给超类(如果有的话),这可能是期待它。

如果另一个对象观察到keyPath,您将不会收到该对象的观察消息。但是,在子类化的情况下,您需要将观察传递给超类,这是重要的。

我发现它有用的另一个地方是你需要观察多个值的值变化并对它们有相同的反应(例如setNeedsDisplay:在某些视图上)。在这种情况下,您可以为它们提供所有相同的上下文,您只需检查上下文,而不是每个keyPath。