【问题标题】:Instruments: checking for memory leaks inquiryInstruments:检查内存泄漏查询
【发布时间】:2010-10-09 20:41:19
【问题描述】:

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

感谢您的任何见解!

【问题讨论】:

    标签: iphone cocoa cocoa-touch memory-leaks


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2012-12-28
        • 1970-01-01
        • 2011-03-08
        • 2011-08-02
        • 2011-05-21
        • 1970-01-01
        • 2017-05-26
        • 2011-08-17
        • 1970-01-01
        相关资源
        最近更新 更多