ios5:停止视图被卸载/停止调用viewDidUnload

时间:2012-10-17 11:40:10

标签: ios ios5 uiviewcontroller ios6 viewdidunload

鉴于iOS6不再卸载视图,因此不再调用UIViewController的{​​{1}},我想知道是否有可靠的方法在iOS5上引起同样的行为?

也就是说,我真的想在iOS5上停止我的视图卸载,原因与苹果公司为什么不再在iOS 6上卸载视图的原因相同(因为它不再节省任何大量的内存,而且是几乎总是额外的错误来源)。我宁愿花时间开发有用的功能,而不是测试现在只能在iOS5上发生并且只在低内存中发生的大量案例!

我进行了搜索,找不到之前曾问过这个问题的人,这让我感到惊讶。它可以像在viewDidUnload中保留对self.view的额外引用一样简单(仅在viewDidLoad中发布它)吗?有没有可能的陷阱?

2 个答案:

答案 0 :(得分:1)

在iOS5上,不支持停止卸载视图,这也会导致巨大的内存问题,因为iOS6处理视图的方式完全不同。在iOS6中,视图的后备存储仍然会在必要时从内存中删除 - 或者至少它被标记为能够从内存中删除。据我所知,在iOS5上并非如此。仅当视图本身被删除时才会删除后备存储,即使视图本身的大小只有几个字节。

看一下这篇精彩的帖子:View Controller Lifecycle in iOS 6 这可能会让您了解您的要求有多复杂。

答案 1 :(得分:1)

现在的主要区别是,didReceiveMemoryWarning不会自动卸载视图,也不会调用viewDidUnload

这并不意味着您不应该卸载您的观看次数 - 事实上,他们建议在didReceiveMemoryWarning中进行WWDC视频。现在的主要区别在于,您完全可以控制发生的事情以及何时发生。许多人依赖于viewDidUnload中的代码,这些代码通常不会按预期调用 - 例如,只需删除视图并释放控制器。

如果您不想发布内存警告视图(再次 - 可能是您想要的或可能不是),您只需将view属性设置为nil即可。如果你的控制器中有一个空didReceiveMemoryWarning,那么它也适用于iOS 5(无需调用super)。

但是,我认真地建议严肃对待这些警告。它们是你唯一可以清理可能未使用的内存的点,并且支持视图存储可能会变得非常大。

编辑:您应该只考虑卸载您的视图,如果它们很少,经常使用且内存占用量低。