1

在 iOS6 中,该方法viewDidUnload已被弃用,内存管理对于UIViewController. 这里简单介绍一下新模式。
在视图控制器中占用更多内存的部分是视图(当然还有您最终会创建的大量数据)。视图本身不会消耗太多内存,是后备存储,被绘制的部分(最奇怪的是CABackingStore)。这种新模式似乎检查了视图控制器的视图所拥有的所有后备存储所占用的内存是易失性的,这些后备存储未显示在窗口中。当内存警告出现时,该后备存储将从内存中清除。使用这种方法,您可以节省重新创建非常昂贵的视图的过程。
Apple 表示从 iOS5 项目中删除 viewDidUnload/viewWillUnload 是安全的,即使您将部署目标设置为 iOS5,模板也不会显示这些方法。我知道,如果视图拥有的出口很弱,当您在超类实现中释放视图控制器的视图时,由于 ARC,一切都将被正确释放,而不会出现泄漏或僵尸。
因为我真的很欣赏这种新方法,所以我对这种情况没有信心:假设我们有一个视图控制器及其视图,这个视图只是一个内容视图,它将承载在视图控制器的 xib 中创建的不同视图,改变它们在运行时动态。当您为此视图创建出口时,它们会自动创建为强大的,这是有道理的,因为“主视图”不拥有它们。
关于新规则,此视图的后备存储不会被签名为 volatile,因为它们不属于 iOS6 和 iOS5 中的主视图(如果我删除viewDidUnLoad),它们将不会出于相同的原因发布。
我该如何处理这种情况?在 didReceiveMemoryWarning 中释放它们是否正确?但是如果视图只加载一次,我可以在 iOS6 中重新创建它们吗?

4

0 回答 0