2012-09-06 138 views
0

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

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

回答

3

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

+0

它显示了91MB的分配(活动字节)列..但它不会保持那样...在几秒钟后它减少到10 mb range .. – sujith1406

+0

好的。你可以在这里粘贴代码的和平,你在做字符串替换吗? – Anessence

+0

感谢那是我有大约1k行字符串替换的问题,并且这些字符串(html页面)中的每一个都有大约30-40kb ..也许...重复分配可能已经使用了很多mem ......这减少了用法最大15 mb – sujith1406

0

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

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

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

注意:如果您在没有XCode的情况下启动仪器,请确保该应用程序未在调试模式下从XCode启动。 XCode 4.0中存在一个错误(我不知道后来它是否被纠正了),但是它发生在我身上,活动监视器的真实内存列没有显示正确的信息。注2:如果您正在进行内存管理测试,您应该始终使用设备来执行测试。总是。

编辑:你甚至可以在你的项目中尝试XCode中的“cmd + shift + B”快捷键,它暗示了一些可能的内存泄漏。它有时是有用的,但该工具并不是每次都对:)

相关问题