目标c-当使用KVO时,有必要删除self作为self-in-dealloc的观察者



在我的NSObject子类的-init方法中,实例将自己添加为自己的一些keyPaths的观察者,以便在任何有问题的属性更改时触发应该发生的操作。例如

[self addObserver:self forKeyPath:@"aProperty" options:0 context:nil];
[self addObserver:self forKeyPath:@"anotherProperty" options:0 context:nil];
...

我的问题是,在类的-delloc方法中,我是否一定需要删除作为其自身观察者的实例?例如

[self removeObserver:self forKeyPath:@"aProperty"];
[self removeObserver:self forKeyPath:@"anotherProperty"];
...

按照我的理解,当一个对象试图向一个已经不存在的对象发送消息时,就会抛出异常,这显然是一个问题。但在这种情况下,一个已经不存在的对象不可能向自己发送消息,所以这应该不是问题。

我还没有遇到任何问题,但它仍然让我感到困扰,因为我从未见过它明确表示你可以这样做。

我只是想避免写一大堆

[self removeObserver:self forKeyPath ...]

在我的-delloc方法中。

您可能可以不删除self作为观察者,但不应该。在执行addObserver:...时,您还必须稍后执行removeObserver:...

但无论如何,这个讨论都无关紧要,因为不需要观察self,只需在属性的setter中触发您的操作即可。这将导致更清晰、可读性更强的代码,实际上性能更好。

最新更新