在应用程序运行期间,仪器中的“泄漏块”中的条目是否意味着内存泄漏?

时间:2011-06-03 01:09:21

标签: iphone xcode memory-leaks xcode4 instruments

在应用程序运行期间,仪器中的“泄漏块”条目是否意味着内存泄漏?

也就是说,如果一个人使用iPhone应用程序的一半,你可能会有一些已经保留的变量,但它没有到应用程序发布的部分,那么这些变量就会显示为泄漏块或不?

如果答案是那些尚未完成的变量确实在这里显示为泄漏块,那么如果你停止/暂停仪器,这将是非常混乱的,在这种情况下,如何以一种方式运行仪器你看到的任何泄漏的块是有效的内存泄漏? (例如,需要先杀死应用程序以结束所有内容然后查看工具?)

2 个答案:

答案 0 :(得分:2)

您应该将泄漏测试分为逻辑单元,无论是基于视图还是基于功能。从头开始,彻底测试初始视图,修复问题,转到下一个视图等等。我建议在测试泄漏之前运行静态分析仪。

答案 1 :(得分:2)

Instruments中的泄漏表示Instruments无法从一组“根”指针中的任何一个开始找到指向已分配内存的指针。具体来说,来自Memory Usage Performance Guidelines

  

Leaks仪器记录应用程序中发生的所有分配事件,然后定期搜索应用程序的可写内存,寄存器和堆栈,以获取对任何活动内存块的引用。如果它没有在其中一个位置找到对块的引用,则会认为该块是“泄漏”,并在“详细信息”窗格中显示相关信息。

因此只要你在一个ivars,局部变量或静态变量中有一个指针,保留一些东西就不是泄漏。但有些方法可能会让Leaks乐器感到困惑,有时苹果的框架也会出现漏洞,有时候乐器会有错误。

随着时间的推移或采取特定行动时,您正在寻找泄漏的东西是稳定且显着增加的泄漏内存量。微小的一次性泄漏通常不值得追逐。