在iPad DetailView情况下,未调用viewDidUnload

时间:2011-08-09 11:40:29

标签: ios ipad uitableview viewdidunload

我设置了一个详细视图,根据在根视图控制器表中选择的项目,我有多个Nib文件被加载。

我发现,对于Nibs的类,viewDidUnload从不被调用,而viewWillDisappear被调用,当然也称为dealloc。

有人知道为什么会这样吗?

感谢。

1 个答案:

答案 0 :(得分:1)

我相信当视图从视图中消失时,通常不会调用viewDidUnload。原因是dealloc通常会处理所有内存转储,因此不需要先调用viewDidUnload

我认为一个例子有助于确定何时调用viewDidUnload。假设您有一个UINavigationController并且您已经推出了一个新视图。这个新视图对内存使用非常沉重,因此应用程序试图支撑一些资源。它通过查看是否加载了当前不在屏幕上的任何视图来完成此操作。如果是这样,它会调用viewDidUnload,理想情况下,您会删除在loadView或viewDidLoad中构建的内容。然后,当您返回到该视图时,它会再次调用loadView或viewDidLoad来重新构建它在viewDidUnload中转储的内容。

但是如果它不需要释放内存来显示你的详细视图,它就不会在正常处理中调用它。这就是调用viewWillDisappear(和dealloc)但从不viewDidUnload的原因。

来自Apple的文档:

  

发生内存不足警告时,UIViewController类将清除   它的视图是否知道它可以在以后重新加载或重新创建它们。如果   发生这种情况时,它还会调用viewDidUnload方法来提供代码   有机会放弃任何相关对象的所有权   与您的视图层次结构,包括使用nib文件加载的对象,   在viewDidLoad方法中创建的对象,以及懒惰创建的对象   在运行时并添加到视图层次结构中。通常,如果您的观点   controller包含outlet(属性或包含的原始变量)   在IBOutlet关键字中,您应该使用viewDidUnload方法   放弃对这些网点的所有权或任何其他与视图相关的数据   那你不再需要了。

UIViewController Class Reference