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 内存管理的主要内容,如果未能解决你的问题,请参考以下文章

在 iPad 上打开新视图,然后关闭现有视图。

内存累积,View Controller 之间切换,怎么回事?

iOS - 内存警告会卸载 View Controller 并使应用程序无响应

使 popover segue 的 View Controller 保持持久(仅分配一个实例)

Objective - C 如何使用 View Controller iphone 管理多个视图

《iOS Human Interface Guidelines》——Split View Controller