低内存崩溃iphone

时间:2012-09-06 13:31:08

标签: iphone memory-management

由于内存不足,我的iPhone应用程序崩溃了。我可以看到崩溃后保存了名为lowmemory的崩溃日志。但是,代码中没有泄漏。

还有其他方法可以减少内存使用量吗?我可以看到,在模拟器中分析应用程序时,内存使用量(分配)达到91 MB,我怀疑这是应用程序在设备上崩溃的点(iPhone 3GS)。那时我正在进行大量的字符串替换(基本上我用HTML替换了大约100个标签)。

2 个答案:

答案 0 :(得分:3)

首先,我不认为您的应用最多使用91mb(太大了)。我认为91mb - 是分配的内存大小(并且可以解除分配,但这个数字没有减少)。 你能查看Live Bytes栏吗? 关于字符串替换:我不知道您如何使用此类功能。但我建议你避免在这种情况下使用NSString并使用NSMutableString并更改内部的字符串值 - 这样可以避免每次分配NSString对象。

答案 1 :(得分:0)

您应该尝试使用“仪器”工具。您可以使用XCode(cmd + I)启动Instruments工具,不使用XCode(cmd + space => Instruments)。

如果您使用XCode启动Instruments,我建议使用“Leaks”选项。你应该按“泄漏”,选择“统计”而不是“调用树”,并且 - 根据我的经验是好的 - 检查以下复选框:隐藏Obj-C,展平递归,隐藏缺失符号,隐藏系统库。 这里的工具会显示在运行期间被上诉的行。

另一种方法是在没有XCode的情况下启动仪器。你应该在这里使用“活动监视器”,选择你的设备并记录它的活动。您应该双击其中一个统计信息以获取统计信息列表。找到您的应用程序名称,然后查看“Real Memory”列。使用你的应用程序玩一点,如果内存增加而不是解除分配,你应该知道你所做的操作使用了哪些类,你应该检查你的课程。

注意:如果在没有XCode的情况下启动Instruments,请确保在调试模式下不从XCode启动应用程序。 XCode 4.0中有一个错误(我不知道以后它是否得到纠正),但在我看来,Activity Monitor的Real Memory列没有显示正确的信息。

注意2:如果您正在进行内存管理测试,则应始终使用设备进行测试。总是

编辑:您甚至可以在项目的XCode中尝试“cmd + shift + B”快捷键,它会显示一些可能的内存泄漏。它有时很有用,但该工具并非每次都正确:)