gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 19:57:12 25 4
gpt4 key购买 nike

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

为什么在使用 Instruments 和我的设备时可以发现内存泄漏,而在使用 iPhone 模拟器时却不能?我知道这是一个高级问题,但我认为无论如何发布任何代码都无济于事(相当多的代码......)。

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

提前致谢!

问候,尼克拉斯

更新:这是否与 OSX 具有自动垃圾收集功能而 iOS 没有?

最佳答案

只信任设备。这就是您的用户将用来运行您的应用程序的设备。
不要相信模拟器。
作为对此的演示,我只是故意向项目添加泄漏。在模拟器中未检测到泄漏,但在设备上按预期显示。
模拟器就是这样:一个模拟器。它可以提高工作速度,但绝不能替代设备。

一旦 Instruments 向您显示泄漏的对象,您可以双击它。它将显示导致泄漏的代码部分。这适用于模拟器和设备。
当您为设备编译时,请确保您处于 Debug模式(并且该模式的设置保留了您的所有符号)。



一些您可能会觉得有用的提示:

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

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

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

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

关于objective-c - 为什么我在设备上使用 Instruments 而在模拟器上没有内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3282560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com