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

Objective c 为什么使用addObserver:forKeyPath:options:context的上下文变量,objective-c,macos,Objective C,Macos,我一直在代码中使用addObserver:forKeyPath:options:context:很多,并且一直将其中的“context”部分设置为nil。我看到很多例子,人们使用了“上下文”,但很难理解确切的原因。如果您有多个对象观察键,并且想知道当键更改时哪个对象应该响应,这是否有帮助?如果是,这是唯一的原因吗 感谢拥有唯一上下文的最大原因是处理子类(或超类)也在观察同一关键路径的情况。如果你知道这个观察是你的,你可以从观察者那里返回。但是,如果它属于其他人,您应该将它传递给超类(如果有),超

我一直在代码中使用addObserver:forKeyPath:options:context:很多,并且一直将其中的“context”部分设置为nil。我看到很多例子,人们使用了“上下文”,但很难理解确切的原因。如果您有多个对象观察键,并且想知道当键更改时哪个对象应该响应,这是否有帮助?如果是,这是唯一的原因吗


感谢

拥有唯一上下文的最大原因是处理子类(或超类)也在观察同一关键路径的情况。如果你知道这个观察是你的,你可以从观察者那里返回。但是,如果它属于其他人,您应该将它传递给超类(如果有),超类可能会期待它

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

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