在我的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中触发您的操作即可。这将导致更清晰、可读性更强的代码,实际上性能更好。