2013-08-01 52 views
0

我的代码如下在我的UIViewController中。是否有意义?dealloc在viewDidUnload后被调用

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

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

或者也许dealloc代码就够了?

回答

1

您应该只有dealloc呼叫removeObserverviewDidUnload不保证被调用(事实上,在iOS6中已被弃用)。一旦对视图控制器的所有引用都消失,最终将调用dealloc

1

将它放在dealloc内就足够了,因为将对象作为观察者添加到通知中并不会增加其引用帐户。只要没有其他引用被保存,视图控制器在从其父视图控制器中移除时将被编辑为dealloc

其实viewDidUnload绝对是错了的地方放它。这种方法很少被调用,并且自iOS6以来它已被弃用,根本不会被调用!

1

删除dealloc中的观察者是一个安全网,你应该有一个安全网。 viewDidUnload在iOS6中已被弃用,因此它将仅用于旧版本的iOS。一般而言,您应该确保在相应的方法中将自己作为观察者移除,以便将自己添加为观察者(如出现和消失的视图)。

+1

使用这种方法所以问题就变成了,对于viewcontroller来说,注册通知处理程序的好方法是什么?有很多地方,并不是每个人都有“相应的方法”来删除它们。例如。 awakeFromNib或viewDidLoad。如果你想接收视图控制器生命周期的通知,那么dealloc是注销的地方,我不认为它是一个'安全网络' – TomSwift

+0

@TomSwift,对于终身注册来说它是真的,它不是一个安全网络只是正确的。 – Wain

1

viewDidUnload已被弃用。 iOS在内存压力条件下调用viewDidUnload。你不应该根据ARC

相关问题