在iPad DetailView的情况下,viewDidUnload没有被调用

问题描述:

我设置了一个详细视图,是否有几个Nib文件可以加载,具体取决于在根视图控制器的表中选择了哪些项目。在iPad DetailView的情况下,viewDidUnload没有被调用

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

有人知道这是为什么吗?

谢谢。

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

我认为一个例子有助于识别何时调用viewDidUnload。假设你有一个UINavigationController,并且你推动了一个新的视图。这种新的观点在内存使用上非常沉重,所以该应用试图支撑一些资源。它通过查看是否加载了当前不在屏幕上的视图来完成此操作。如果是这样,它会调用viewDidUnload,理想情况下,您将删除您在loadView或viewDidLoad中构建的内容。然后,当您回到该视图时,它会再次调用loadView或viewDidLoad以重建它在viewDidUnload中抛弃的内容。

但是,如果它不需要释放内存来显示您的详细视图,它将不会在正常处理中调用它。这就是为什么viewWillDisappear被称为(和dealloc),但从来没有viewDidUnload

从苹果公司的文档:

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

UIViewController Class Reference