【问题标题】:Out of memory in XCode, but not in InstrumentsXCode 内存不足,但 Instruments 内存不足
【发布时间】:2014-10-15 02:02:08
【问题描述】:

我的应用程序内存不足。在 XCode 的内存报告中,我可以看到设备在关闭之前的内存使用率上升到 500Mb 以上一点。

在 Instruments 中进行分析时(使用分配工具或泄漏工具)不会发生这种情况。该进程运行高达约 100Mb,并在运行任务的内存密集部分时达到平衡。该应用在 Instruments 中运行时不会崩溃。

什么会导致差异?

运行的紧张过程是利用 UIWebView 来确定多个内容页面的长度。 Web 视图位于后台并加载页面。加载完成后,它会计算大小并加载下一页,直到计算出所有页面的长度。

由于我无法在 Instruments 中遇到相同的内存问题,因此我在所有主要部分的 init 和 dealloc 方法中添加了日志记录,并且可以确认它们正在按预期分配和释放。

在那之后,我尝试假设分配和释放正常进行,但我只是分配的速度比系统重新分配内存的速度要快。我尝试在内存用完之前尽早停止该进程,以查看内存使用量是否会下降。 XCode 的内存报告确实报告了小幅下降,但幅度不大——即使在静置几分钟后也是如此。

我的下一步是尝试简化流程,直到问题被消除。

有没有其他人遇到过类似的情况,即 Instruments 中的应用程序与 Instruments 中的应用程序完全不同,或者对可能导致这种情况的原因有任何解释?

【问题讨论】:

  • 尝试更频繁地使用@autoreleasepool
  • 我会查看这两个方案并确保设置相同。分析器可能正在使用非调试配置,而“运行”正在使用调试配置。我还要特别注意在后者中使用僵尸,这会占用内存来跟踪所有释放的对象。见developer.apple.com/library/mac/recipes/…
  • @Rob 谢谢,僵尸设置原来是问题所在。我之前检查过探查器和“运行”之间的配置,但错过了僵尸设置。如果您提交您的评论作为答案,我会接受。

标签: ios objective-c xcode memory xcode-instruments


【解决方案1】:

我会查看这两个方案并确保设置相同。分析器可能正在使用非调试配置,而“运行”正在使用调试配置。

我会特别注意“运行”配置的“Diagnostics”选项卡中的“启用僵尸对象”,因为它会占用内存来跟踪所有释放的对象。 Zombies 是一个很棒的诊断工具,但您希望将其关闭以确保回收与已释放对象相关的所有内存。

有关获取方案配置的信息,请参阅https://developer.apple.com/library/mac/recipes/xcode_help-scheme_editor/Articles/SchemeDialog.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 2011-05-21
    • 2015-02-12
    • 2021-12-20
    • 2021-10-29
    • 1970-01-01
    • 2020-03-12
    相关资源
    最近更新 更多