【问题标题】:low memory crash iphoneiphone内存不足崩溃
【发布时间】:2012-09-06 13:31:07
【问题描述】:

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

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

【问题讨论】:

    标签: iphone memory-management


    【解决方案1】:

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

    【讨论】:

    • 它在 (live bytes) 列中显示 91 mb 分配 ..但是它并没有保持这样...几秒钟后它减少到 10 mb 范围..
    • 好的。你能把代码粘贴在这里吗,你在做字符串替换吗?
    • 谢谢,这是我有大约 1k 行字符串替换的问题,每个字符串(html 页面)都有大约 30-40kb .. 也许......重复分配可能使用了这么多内存...这将使用量减少到最大 15 mb
    【解决方案2】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      • 2012-07-01
      • 2018-07-28
      相关资源
      最近更新 更多