iPhone开发 - 在didReceiveMemoryWarning或每次

时间:2009-08-18 15:28:03

标签: iphone iphone-sdk-3.0 uiview uiviewcontroller memory-management

在多视图应用程序中,您认为最好让视图在内存紧张的情况下自动卸载,或者实际上一次只分配一个View Controller,当您切换视图时,新的视图是创建,旧的删除,新的添加和旧的发布。每次解除分配也意味着切换到新选项卡时会有轻微的延迟(非常轻微)。那你觉得怎么样?

另外,我对如何以及何时何地以及通过谁自动发布视图(通过viewDidUnload)感到有些困惑。如果有人能为我澄清,谢谢。

2 个答案:

答案 0 :(得分:1)

一般情况下,请不要卸载视图,除非你必须(didReceiveMemoryWarning)或它有意义(类似登录表单不太可能再次使用)。

你不能真正假设你有一个固定的内存量。 iPhone的内存比iPod触摸的内存少。 iPhone 3GS的内存比任何一个都多。破牢的手机通常具有更少的内存。

通过仅在必要时释放视图,让您的应用程序在3GS上运行得更快,并允许它在可用内存较少的情况下运行。

如果视图不可见,didReceiveMemoryWarning方法会释放该视图。以下内容来自文档(v3.x):

  

此默认实现   方法检查是否有视图   控制器可以安全地释放它   视图。如果视图可以这样做   本身没有超视图和   可以从nib文件重新加载   或使用自定义loadView方法。如果   该方法可以释放视图   释放它并调用它   viewDidUnload方法。

显然,您还需要释放任何缓存数据。 SDK2.x没有viewDidUnload方法。

答案 1 :(得分:0)

取决于,如果你有一堆视图,用户经常切换回来,那么我会说那时保留在内存中,如果theres查看用户不会回来一段时间然后你可能卸载viewController并保存内存。但是,如果您的视图占用大量内存,那么在未使用时卸载viewcontroller可能是明智之举。这真的是你回到视图的频率以及视图需要多少内存,以及你有多少视图。考虑到这些因素,您应该能够很好地决定何时保持viewControllers以及何时卸载它们。我相信只要ViewController存在,视图就是一个回合(除非你明确地释放它,这可能有不好的副作用(不知道)),viewdidUnload只是告诉你视图已经卸载了屏幕,不太确定在那一点上。

相关问题