Objective c 拆卸UIViewController时是否始终调用ViewDiUnload和dealloc?

Objective c 拆卸UIViewController时是否始终调用ViewDiUnload和dealloc?,objective-c,ios,cocoa-touch,memory-management,uiviewcontroller,Objective C,Ios,Cocoa Touch,Memory Management,Uiviewcontroller,我想知道在UIViewController拆卸过程中,viewDidUnload和dealloc是否总是连续调用。是否可能在我的视图控制器上调用dealloc,而不首先调用viewDidUnload 在任何一种情况下,如果我安全地释放两个方法中的属性并保留引用,那么如果两个方法都被调用,这都不会是一个问题——但我想知道是否有人确切地知道或者能够对拆卸过程有所了解 2012更新:请注意,好像iOS 6viewDidUnload已被弃用,如果需要,应在didReceiveMemoryWarning中

我想知道在UIViewController拆卸过程中,
viewDidUnload
dealloc
是否总是连续调用。是否可能在我的视图控制器上调用
dealloc
,而不首先调用
viewDidUnload

在任何一种情况下,如果我安全地释放两个方法中的属性并保留引用,那么如果两个方法都被调用,这都不会是一个问题——但我想知道是否有人确切地知道或者能够对拆卸过程有所了解

2012更新:请注意,好像iOS 6
viewDidUnload
已被弃用,如果需要,应在
didReceiveMemoryWarning
中用手动视图拆卸替换


关于新UIView/UIViewContoller和新行为及其对

viewDidUnload
的影响的好文章不会像
dealloc
方法那样每次都被调用
viewDidUnload
仅在应用程序收到内存不足警告时调用


试想一下,如果您同时在
viewDidUnload
dealloc
方法中释放对象。如果每次都调用这两个对象,那么您正在释放已经释放的对象,这将导致应用程序崩溃,不是吗
viewDidiUnload
是苹果公司提供的一个地方,用于在收到内存不足警告时清理东西,因为你知道在iPhone中,我们有内存限制。

考虑得很周到,viewDidiUnload方法只有在出现内存警告时才会被调用。好的做法是在这个方法中释放对象,并使对象为零。

我想你在回答中说的
viewDidLoad
是指
viewDidLoad
<当内存不足时,不调用code>viewDidLoad,而是在视图将出现在屏幕上时调用(在
视图将出现之前)<当出现内存不足警告时,将调用code>viewDidUnload
。这应该是正确答案。这让我今天遇到了麻烦。似乎可以在viewDidUnload中执行self.whatever=nil,然后在dealloc中调用[\u whater release]。这样,如果首先调用viewDidUnload,则dealloc不会过度释放该项,因为它将被置为零,并且释放消息在发送到零时将消失。有人能证实吗?是的。一旦self.whater设置为nil,调用[whater release]就变成了一个no op:您将释放消息发送给nil对象,而不是whater对象(因为它不再指向它曾经持有的对象)。