iPad View Controller 内存管理
Posted
技术标签:
【中文标题】iPad View Controller 内存管理【英文标题】:iPad View Controller Memory Management 【发布时间】:2010-12-19 13:26:36 【问题描述】:我的 iPad 应用中有 3 个视图控制器。当第一个出现时,Instruments 中的活动监视器告诉我应用程序的内存为 25MB。在 [self presentModalViewController] 调用之后,弹出了一个新的视图控制器,内存增加到 50MB,然后是第三个,70-75MB。
iPad 开发的最佳视图控制器内存管理是什么?现在,当我使用真正的 iPad 时,我总是会收到内存警告。
提前致谢。我为我的英语感到抱歉,因为它不是我的母语。 :)
【问题讨论】:
【参考方案1】:iPad 只有 256 MB 的 RAM,是 iPhone 4 的一半。
您的视图控制器似乎正在加载大量资源或在其他地方分配大量内存。您应该能够使用 Instruments 工具找出内存的确切分配位置。
【讨论】:
【参考方案2】:您检查过内存泄漏吗? 仪器 -> 泄漏。 http://developer.apple.com/library/ios/#documentation/Performance/Conceptual/ManagingMemory/Articles/FindingLeaks.html 另一个考虑是正确分配和释放所有对象,这并不容易,但很有必要。
您可以从构建选项启用另一个控件:RUN_CLANG_STATIC_ANALYZER
以在编译时显示所有错误版本。
阿尔贝托,
【讨论】:
【参考方案3】:我的建议是查看每个视图控制器的 viewDidUnload 方法。从 iOS 3.0 开始,当您的应用收到内存警告时,iOS 将尝试在此处取回一些内存。
为了更清楚,您应该尝试在此方法中将所有 IBOutlets 设置为 nil,以便在调用时,您不必要的 UI 内容(不必要,因为当时那些 nib 文件未显示给用户)将被清除并将其分配的内存返回给操作系统。当它们再次出现时,它们将被 viewDidLoad 方法重新创建。
示例代码:
- (void)viewDidUnload
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
【讨论】:
以上是关于iPad View Controller 内存管理的主要内容,如果未能解决你的问题,请参考以下文章
内存累积,View Controller 之间切换,怎么回事?
iOS - 内存警告会卸载 View Controller 并使应用程序无响应
使 popover segue 的 View Controller 保持持久(仅分配一个实例)