【问题标题】:Memory graph / chart in XCode 5 during Debug调试期间 XCode 5 中的内存图/图表
【发布时间】:2013-10-24 00:25:54
【问题描述】:

“内存”使用图表/图形在 XCode 5 调试导航器窗口中究竟代表什么?

我有一个禁用 ARC 且没有故事板/xib(即旧样式)的 iOS 应用项目。使用保留/释放/自动释放手动完成所有内存管理。

当我在 XCode 5 中调试项目时,内存饼图/图表显示随着应用程序运行内存使用量逐渐增加,半小时内内存占用量超过 1 GB。

大致上,它每 2 到 3 秒不断增加 0.1 到 0.3 MB,内存下降/减少非常罕见(幅度

这是关于内存管理的问题(内存泄漏)吗?我进行了内存分析(通过 XCode 4.6 上的 Instruments 使用分配/内存泄漏),但没有发现任何泄漏。

【问题讨论】:

    标签: objective-c xcode memory-management


    【解决方案1】:

    自己找到答案。不幸的是,我有 NSZombieEnabled (Zombie object) 用于调试模式 - 见下文 - (menu Product > Scheme > Edit Scheme)

    通常 NSZombieEnabled 工具甚至会将释放的对象保留在内存中,以帮助开发人员找到过度释放的对象。参考这个链接 - What is NSZombie?

    在我取消选中“启用僵尸对象”选项后,即使在应用程序使用半小时后,内存使用量也稳定在大约 10 mb(并不总是增加) - 见下文 -

    底线 - 当您要分析内存使用情况时,请确保清除“启用僵尸对象”。

    【讨论】:

    • FWIW,这简直要了我的命。显然,我被分析的版本与 Xcode 在启用了僵尸的调试版本中显示的内存使用不匹配。谢谢你。
    • 这是一个启示。非常感谢。
    • 感谢您指出这一点。当我在 Instruments 中进行简介时,我快疯了,却看不到同样的东西。不久前我确实检查了启用僵尸对象。
    • 你确定它有效吗?启用 Zombie 对象时 - 调试导航器中不显示内存进度(至少 XCODE 6)
    • 非常有帮助!,在 Xcode 8.2 中禁用 Zombie 对象再次显示内存图。
    【解决方案2】:

    它只是测量您的应用使用的内存。所以如果它在增加它一定是内存泄漏。

    在使用泄漏分析工具时,我会将其用作指南。它可能会帮助您找到泄漏,但使用所有自动化工具可能无法全部找到。由于某些代码片段(尤其是更动态的片段)可能很难预测它们对自动化工具在内存方面的作用。

    【讨论】:

    • 当我在 XCode 4.6 Instruments 中进行分析时,它显示总内存使用量接近 1.5 GB,但活动内存列显示使用量仅接近 2-3 MB。此外,内存泄漏没有标记任何印迹。你会推荐什么工具或实践来捕捉这个(泄漏!)?
    • 不要在 iOS 模拟器上测试,因为它可能不准确是一个建议。但这里有一些视频链接解释了内存泄漏工具可能无法捕获内存泄漏的情况。第 1 部分:youtube.com/watch?v=4tvEFwWItQU 第 2 部分:youtube.com/watch?v=HBvBL_m2-5k
    • 在第 2 部分中,他建议使用分析选项,因为它可以拾取工具工具无法拾取的内存泄漏。
    • 这些视频很有用 (+1)。在我“检查”这个答案之前,让我分析并确认你的答案。敬请关注! :)
    • 在我的案例中发现了真正的问题(请参阅我的检查答案)。但是,我总体上同意您的解释 (+1)。
    【解决方案3】:

    我看到一个问题,即内存(堆)在繁重的处理中无限增长,但在没有 Xcode 的情况下运行完全相同的二进制文件时;内存使用很好。记得在 Xcode 之外进行测试——不知道原因是什么。 NSZombies 和所有其他调试选项都关闭

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-15
      • 1970-01-01
      • 1970-01-01
      • 2017-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-23
      相关资源
      最近更新 更多