代码之家  ›  专栏  ›  技术社区  ›  Nicsoft

为什么我会在设备上使用仪器而不是模拟器上发生内存泄漏?

  •  3
  • Nicsoft  · 技术社区  · 16 年前

    我即将完成应用程序的发布,并试图使用工具来修复任何内存泄漏。

    为什么我可以在使用仪器和设备时发现一个内存泄漏,但在使用iPhone模拟器时却不能发现?我知道这是一个高层次的问题,但我认为发布任何代码都不会有任何帮助(相当多的代码…)。

    有没有可能让仪器指向它认为泄漏的源代码?我可以在使用模拟器的时候做,但在设备上使用它时,它似乎不起作用(对象由地址表示(我假设),而在模拟器上运行它时,它会看到它是什么对象,设置问题?)

    事先谢谢!

    当做, 尼克拉斯

    更新:这是否与OSX正在进行自动垃圾收集有关,但IOS没有?

    2 回复  |  直到 16 年前
        1
  •  8
  •   Guillaume    16 年前

    只信任设备。 这就是您的用户将用来运行应用程序的方法。
    不要相信模拟器。
    为了证明这一点,我故意在一个项目中添加了一个漏洞。在模拟器中未检测到泄漏,但在设备上按预期显示。
    模拟器就是:一个模拟器。它可以帮助更快地工作,但绝不是设备的替代品。

    一旦仪器显示有泄漏的物体,你可以双击它。它将显示对泄漏负责的代码部分。这适用于模拟器和设备。
    为设备编译时,请确保处于调试模式(并且此模式的设置保留了所有符号)。



    您可能会发现更多有用的提示:

    对于更流畅的会话,请禁用“自动泄漏检查”,并在适当时手动按下“立即检查泄漏”按钮。

    “构建和分析”命令将做一个出色的工作来帮助您发现漏洞。它不是(完全)神奇的,所以它不会找到所有的漏洞。例如,无法识别泄露的IVARS。但是对于一个方法的范围来说,它是非常棒的。
    我强烈建议在您的构建设置中激活“运行静态分析器”标志(或者仅在编译速度较慢的情况下用于发布模式)。

    如果您想了解有关如何使用仪器查找泄漏的更多信息,请阅读以下Apple文档: Instruments User Guide: Built-in Instruments 和 Instruments User Guide: Viewing and Analysing Trace Data > Looking for Memory Leaks
    您还可以观看WWDC相关会话的视频。
    如果你仍然不明白泄漏的来源,现在是时候重新阅读 Memory Management Programming Guide .

    感谢您提供无泄漏应用程序。iOS 4现在比以往任何时候都更重要。

        2
  •  0
  •   Nick    16 年前

    如果您还没有查看构建菜单中方便的“构建和分析”选项。它将运行静态分析器,这通常做得很好。如果什么都没有出现,你可以花点时间回顾一下WWDC会议上关于仪器的视频。

    在硬件上进行分析是无法替代的,在连接了调试程序和仪器的情况下,您可以在模拟器上下文中获得所需的一切。