iPhone内存问题

时间:2010-06-17 07:43:06

标签: iphone objective-c cocoa

我正在开发一个已经制作的应用程序但是在开发阶段没有考虑内存管理。 那么,一旦收到内存警告,我该怎么办才能将App内存使用率保持在低水平? 是否有任何通用工具或某些代码可用于释放任何未使用的内存?

3 个答案:

答案 0 :(得分:1)

Xcode可以与Instruments工具结合使用,向您显示应用程序泄漏内存的位置,即未正确释放保留内存的位置。 CIMGF有一个坚实的教程:http://www.cimgf.com/2008/04/02/cocoa-tutorial-fixing-memory-leaks-with-instruments/

答案 1 :(得分:1)

两件事。

首先,如果您正在使用任何类型的视图层次结构(标签栏,UINavigationController或您自己推送的内容),则消息将向上传播。这意味着根级别UIViewController子类中的内存消息的一个处理程序可以处理整个应用程序的内存事件,这非常方便。

其次,你想要追求低调的果实。在我正在开发的应用程序中,我有几个不同的字典数组,其中包含我的应用程序数据,每个字典都包含缩略图和更大的图像。显然,那些构成了我记忆中的大部分内容。因此,我的根视图控制器在收到内存警告时所做的第一件事就是遍历这些数据集并将这些图像设置为nil。因为它们是保留的属性,所以当调用setter并从内存中释放图像时,它们会被释放。然后我在视图控制器中有函数来注意那些图像字段的无效并从服务器重新加载它们。

顺便说一下(好吧......两件事和一个“顺便说一下”),内存警告不是问题。有些人似乎对获取它们感到不满,想要重新设计有关其应用的所有内容,以便它们永远不会得到它们。那真的没必要;即使是设计最好的应用程序也会偶尔被警告内存,这只是因为设备上背景应用程序的不可预测性。重要的是妥善处理它们。

答案 2 :(得分:0)

你应该看看方法

- (void)didReceiveMemoryWarning
你的UIViewControllers的

。收到内存警告时会调用此方法。在这里,您可以释放当前未使用的对象。但是你要确定使用什么和不使用什么。

XCode的“构建和分析”功能是一个可用于查看代码是否包含任何明显内存泄漏的工具。

您应该查看UIViewController类引用中的“Memory Management”小部分: http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html

另一个重要文件是“内存管理编程指南”: http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html