是否在viewDidUnload之后调用dealloc

时间:2013-08-01 20:38:52

标签: ios

我的UIViewController中有以下代码。它有意义吗?

- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

- (void)viewDidUnload {
    [super viewDidUnload];
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

或者dealloc代码就足够了?

4 个答案:

答案 0 :(得分:1)

将其放在dealloc内就足够了,因为将一个对象添加为通知的观察者不会增加其参考帐户。只要没有其他引用,视图控制器在从其父视图控制器中删除时将为dealloc

事实上,viewDidUnload绝对是错误的地方。这个方法很少被调用,因为iOS6它已被弃用,根本就没有被调用过!

答案 1 :(得分:1)

您应该只在removeObserver中进行dealloc来电。根本不保证viewDidUnload被调用(实际上在iOS6中已被弃用)。一旦对viewcontroller的所有引用都消失,最终将调用dealloc

答案 2 :(得分:1)

删除dealloc中的观察者是一个安全网,你应该有一个安全网。 iOS6中不推荐使用viewDidUnload,因此无论如何它只会在旧版本的iOS中使用。一般来说,你应该确保在相应的方法中将自己作为观察者移除自己作为观察者的位置(如出现和消失的视图)。

答案 3 :(得分:1)

viewDidUnload已被弃用。 iOS在内存压力条件下调用viewDidUnload。您不必在ARC

下使用此方法