在最新的SDK中使用自动发布池,删除通知是否必要,甚至是有益的?

时间:2013-03-15 03:16:21

标签: ios objective-c

我正在使用一些Objective-C代码,我想知道......我注意到,在了解NSNotificationCenter时,通常很好的做法是在dealloc上删除NSNotificationCenter观察者。但是,在使用自动释放池的情况下 - 这是否需要处理,或者我仍然需要dealloc方法吗?

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

提前致谢!

3 个答案:

答案 0 :(得分:3)

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

如果有问题的通知被触发,它将尝试调用您的实例。如果该实例无效(例如由于重新分配),您的应用将崩溃。

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

答案 1 :(得分:1)

我不相信NSNotificationCenter支持弱引用。它使用unsafe_unretained引用,因此如果你不在dealloc中清理它,你可能会得到一个悬空指针。

答案 2 :(得分:1)

在每种情况下,您仍需要注意移除观察者 您的自动释放池只保存您的对象,直到池释放后池才会释放,它会向每个对象发送释放消息,如果该对象的保留计数变为零,则将其释放。在解除分配之前,调用dealloc方法 P.S。自动发布池不关心dealloc方法中的内容。