我正在使用一些Objective-C代码,我想知道......我注意到,在了解NSNotificationCenter时,通常很好的做法是在dealloc上删除NSNotificationCenter观察者。但是,在使用自动释放池的情况下 - 这是否需要处理,或者我仍然需要dealloc方法吗?
- (void) dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self name:XBPageCurlViewDidSnapToPointNotification object:nil];
}
提前致谢!
答案 0 :(得分:3)
无论如何,您都需要注意删除在该类实例的生命周期内添加的观察者。
如果有问题的通知被触发,它将尝试调用您的实例。如果该实例无效(例如由于重新分配),您的应用将崩溃。
根据经验,UIKit本身并不使用ARC(通常有例外),因此不会遵守弱引用。
答案 1 :(得分:1)
我不相信NSNotificationCenter支持弱引用。它使用unsafe_unretained引用,因此如果你不在dealloc
中清理它,你可能会得到一个悬空指针。
答案 2 :(得分:1)
在每种情况下,您仍需要注意移除观察者
您的自动释放池只保存您的对象,直到池释放后池才会释放,它会向每个对象发送释放消息,如果该对象的保留计数变为零,则将其释放。在解除分配之前,调用dealloc
方法
P.S。自动发布池不关心dealloc
方法中的内容。