1

我正在使用一些 Objective-C 代码,我想知道..我注意到,在学习 NSNotificationCenter 时,在 dealloc 上删除 NSNotificationCenter 观察者通常是一种好习惯。但是,在使用自动释放池的情况下 - 是否已处理好,还是我仍然需要一个 dealloc 方法?

- (void) dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self name:XBPageCurlViewDidSnapToPointNotification object:nil];
}

提前致谢!

4

3 回答 3

3

无论如何,您都需要注意删除在该类实例的生命周期内添加的观察者。

如果该通知确实被触发,它将尝试调用您的实例。如果该实例变得无效(例如由于解除分配),您的应用程序将崩溃。

根据经验,UIKit 本身不使用 ARC(通常有例外),因此不会坚持弱引用。

于 2013-03-15T03:20:08.603 回答
1

我不相信 NSNotificationCenter 支持弱引用。相反,它使用 unsafe_unretained 引用,因此如果您不在dealloc.

于 2013-03-15T03:23:08.183 回答
1

在每种情况下,您仍然需要注意删除观察者。
您的自动释放池只保留您的对象,直到池未释放,一旦池被释放,它就会向每个对象发送释放消息,如果该对象的保留计数变为零,则它被释放。在释放之前dealloc调用它的方法。
PS Auto 释放池并不关心您的dealloc方法中发生了什么。

于 2013-03-15T03:23:18.043 回答