0

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

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

4

2 回答 2

3

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

于 2012-09-06T13:41:03.063 回答
0

您应该尝试使用 Instruments 工具。您可以使用 XCode (cmd + I) 启动 Instruments 工具,而无需 XCode (cmd + space => Instruments)。

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

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

注意:如果您在没有 XCode 的情况下启动 Instruments,请确保应用程序不是在调试模式下从 XCode 启动的。XCode 4.0 中有一个错误(我不知道后来是否更正了它),但它发生在我身上,活动监视器的真实内存列没有显示正确的信息。

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

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

于 2012-09-06T13:52:06.747 回答