为什么我在设备上使用Instruments但在模拟器上没有内存泄漏

时间:2010-07-19 15:39:15

标签: objective-c xcode debugging memory-leaks instruments

我即将完成应用程序的发布,并正在尝试使用Instruments来修复任何内存泄漏。

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

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

提前致谢!

此致 尼古拉斯

更新:它是否与OSX有自动垃圾收集有关,但iOS没有?

2 个答案:

答案 0 :(得分:8)

仅信任该设备。这是您的用户用于运行您的应用程序的内容 不要相信模拟器 作为对此的证明,我只是故意在项目中添加了泄漏。在模拟器中没有检测到泄漏,但在设备上出现了预期 模拟器只是:一个模拟器。更快地工作可能很有用,但绝不能替代设备。

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



您可能会发现一些有用的提示:

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

“构建和分析”命令可以帮助您找到泄漏。它不是(完全)神奇的,所以它不会发现所有的泄漏。例如,泄露的iVars将无法识别。但是对于方法的范围来说,它真棒 我强烈建议在构建设置中激活“运行静态分析器”标志(或者如果编译机器速度慢,则仅针对“释放”模式)。

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

感谢您希望发布无泄漏的应用程序。使用iOS 4,现在比以往任何时候都更重要。

答案 1 :(得分:0)

如果您尚未查看构建菜单中方便的“构建和分析”选项。它将运行静态分析仪,通常做得很好。如果没有任何结果,您应该花些时间查看仪器上的WWDC会话视频。

无法替代硬件上的分析,并且通过调试器和连接的仪器,您可以获得模拟器环境中的所有内容。

相关问题