繁体   English   中英

仪器:检查 memory 泄漏查询

[英]Instruments: checking for memory leaks inquiry

我很好奇,当一个人继续执行他们的代码以使用 Instruments 进行泄漏检查时 - 手动点击应用程序的所有部分以确保 memory 泄漏发生在相应区域是否谨慎? 例如,我相信我的应用程序中有一些 memory 泄漏,在 UINavigationController 树的深处。 我是否提前 go 并运行应用程序检查泄漏,同时在 iPhone 上手动向下钻取以到达应用程序的该部分? Instruments 是否足够聪明,可以自己找到它? 正确的方法是什么?

感谢您的任何见解!

不,Instruments 只是监视代码的 memory 分配,它不会“去”任何地方,除非你的应用程序去那里。 实际上,泄漏只不过是 memory 的一块,不再存在参考; 因此它不能再被释放,因为如果你甚至不能再引用它,你将如何释放它?

不过,仪器不会以这种方式发现所有 memory 泄漏。 如果您保留对 memory 的引用,请不要使用它们来释放 memory,Instruments 不会将此视为泄漏,因为它无法预测您是否会在将来释放它。 由于您仍然可以释放它,因此它不被视为泄漏。 因此,如果您有 memory 问题,那么不仅要查找泄漏,而且还要监控您的应用程序在一段时间内“收集”了多少 memory,这可能是有益的。 如果即使它不应该永久上升,您可能仍然有泄漏,只是没有丢失对 memory 的引用。

通常,我会关注可能导致泄漏的模块,然后再扩大 scope。 虽然我没有在 Mac 上使用 Instruments,但我使用 Purify 和原生 Windows 堆工具在 Windows 程序中进行 memory 泄漏跟踪。

在您确定了主要泄漏的来源之后,使用不同的测试输入运行程序并通常检查程序是否存在其他泄漏从来都不是一个坏主意。 即使是特定数据集的小泄漏也可能导致更大的泄漏。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM