Nic*_*oft 3 debugging xcode memory-leaks objective-c instruments
我即将完成我的应用程序的发布,并正在尝试使用Instruments来修复任何内存泄漏.
为什么我在使用Instruments和我的设备时会发现一次内存泄漏,但在使用iPhone模拟器时却没有?我知道这是一个高级别的问题,但我不认为发布任何代码会有所帮助(相当多的代码......).
是否有可能让仪器指向它认为泄漏的源代码?我可以在使用模拟器时这样做,但是当它用于设备时它似乎不起作用(对象由地址(我假设)表示,同时为模拟器运行它看到它是什么对象,设置问题?)
提前致谢!
此致,尼克拉斯
更新:它是否与OSX有自动垃圾收集有关,但iOS没有?
只信任设备.这就是您的用户将用于运行您的应用程序的内容.
不要相信模拟器.
作为对此的证明,我只是故意在项目中添加了泄漏.在模拟器中未检测到泄漏,但在设备上出现了预期.
模拟器只是:一个模拟器.更快地工作可能很有用,但绝不是设备的替代品.
一旦仪器向您显示泄漏的物体,您可以双击它.它将显示负责泄漏的代码部分.这适用于模拟器和设备.
编译设备时,请确保您处于调试模式(并且此模式的设置保留了所有符号).
您可能会发现一些有用的提示:
要获得更流畅的会话,请禁用"自动泄漏检查",并在适当时手动按"立即检查泄漏"按钮.
"构建和分析"命令将帮助您找到泄漏.它不是(完全)神奇的,所以它不会发现所有的泄漏.例如,泄露的iVars将无法识别.但是对于方法的范围来说,它真棒.
我强烈建议在构建设置中激活"运行静态分析器"标志(或者如果编译机器速度慢,则仅针对"释放"模式).
如果您想了解有关如何使用Instruments查找泄漏的更多信息,请阅读Apple doc:Instruments用户指南:内置仪器和仪器用户指南:查看和分析跟踪数据>查找内存泄漏
您还可以观看视频WWDC相关会议.
如果您仍然不了解泄漏的来源,则需要(重新)阅读" 内存管理编程指南".
感谢您希望发布无泄漏的应用程序.使用iOS 4,现在比以往任何时候都更重要.