【问题标题】:Analyze and instruments分析和仪器
【发布时间】:2012-03-02 07:15:56
【问题描述】:

嗯,这个问题可能听起来很傻,但是... 当我在分析模式下或使用仪器运行我的应用程序时,我不可能(分析模式)或内存(仪器)泄漏。 这是否意味着我的应用 100% 没有内存泄漏?

【问题讨论】:

    标签: objective-c ios memory-management memory-leaks instruments


    【解决方案1】:

    你可以假设它现在处于最佳状态。

    【讨论】:

    • 绝对不是。大约有无数种方法可以分配内存,这些内存既不是泄漏也不是分析器无法检测到的,但仍会由于内存耗尽而导致崩溃。
    【解决方案2】:

    没有。一方面,您必须在应用程序中运行所有可能的执行路径/状态序列,以通过简单的测试明确表示没有泄漏。更重要的是,真正的内存泄漏,即您不释放内存但不再引用它的地方,是仪器能够检测到的所有泄漏。

    但是,这些不是您可以创建的唯一类似问题。您也可以轻松地不丢弃不再实际需要的数据,从而导致内存增加。这不是真正的泄漏,因为您仍然有对相关数据的引用,只是您还没有发布它并摆脱了对它的引用。

    您仍然可以使用分配工具发现此类问题。它不会明确标记问题,但它可以让您查看是否分配了很多您以后不会释放的内存。尤其是在 iOS 上,确保在不再需要分配的内存时放弃分配的内存非常重要,否则应用的内存使用量将会增长,直到操作系统终止您的应用。

    【讨论】:

    • 嗯,我做了一些测试,我认为我有你在第三段中注意到的问题。针对使用分配进行的测试,我的内存(实时字节)略有增加。那部分代码只是在两个视图之间切换。我相信这是一个问题,对吧?实时字节显示在视图之间切换时,内存使用量增长了大约 20kb/~10 次。
    • 是的——这可能是个问题。或者它可能是最终会被修剪的缓存。 Heapshot 分析是下一步。 friday.com/bbum/2010/10/17/…
    • 我要检查一下。谢谢!
    【解决方案3】:

    这实际上取决于您对泄漏的测试效果如何,但请记住,尽管 Leaks 尽力尝试它并不是万无一失的,但如果您完成工作,您可以合理地确定您的应用程序。不要忘记使用泄漏以外的其他工具,分配工具可用于拾取废弃的内存,而泄漏不会向您指出,但可能同样麻烦。

    【讨论】:

      【解决方案4】:

      当您分析时,您的应用程序不会运行,而是静态分析器会查看您的代码。关于仪器,检查您的配置文件配置(在编辑方案中)是否设置为调试。否则,您的应用程序将被去除符号,并且泄漏工具将无法工作。

      【讨论】:

      • 不正确;无论有没有符号,泄漏都可以正常工作。
      猜你喜欢
      • 1970-01-01
      • 2010-10-04
      • 2012-03-09
      • 2016-12-02
      • 1970-01-01
      • 1970-01-01
      • 2021-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多