在拆除UIViewController时是否始终调用viewDidUnload和dealloc?

时间:2009-11-20 03:06:44

标签: objective-c ios cocoa-touch memory-management uiviewcontroller

我想知道在UIViewController拆除过程中,viewDidUnloaddealloc是否总是连续调用。如果没有先调用dealloc,我的视图控制器是否可以调用viewDidUnload

在任何一种情况下,如果我安全地释放属性并在两种方法中保留引用,如果两种方法都被调用就不会有问题 - 但我想知道是否有人确切知道或者可能会对拆卸过程。

2012年更新:很容易注意到iOS 6 viewDidUnload已被弃用,应该替换为{{>在需要时的手动视图拆分 1}}。

关于新UIView / UIViewContoller的一篇好文章及其新行为及其对joe conway blog

的影响

2 个答案:

答案 0 :(得分:35)

viewDidUnload 不会像dealloc方法那样每次都被调用。仅当您的应用收到内存不足警告时才会调用viewDidUnload

如果您要使用viewDidUnloaddealloc方法发布对象,请考虑一下。如果两次都被调用,那么你正在释放已经释放的对象,这会导致应用程序崩溃,不是吗? viewDidUnload是Apple提供的用于在收到低内存警告时清理内容的地方,因为您在iPhone中知道我们有内存限制。

答案 1 :(得分:0)

非常周到,只有在出现内存警告时才会调用viewDidiUnload方法。好的做法是在此方法中释放必需的对象,并使对象为零。