我应该如何解释泄漏工具中的“所有分配”数据?

时间:2010-09-14 19:55:18

标签: xcode memory-leaks ios-simulator instruments

当我注意到泄漏模拟器中的“所有分配”类别在我打开和关闭子视图时不断增加其大小时,我已经编写了一个应用程序并且正在测试它是否存在内存泄漏。

我最初认为这是内存泄漏,但它没有在泄漏标签中显示为泄漏。

这是正常的吗?

Screenshot of the simulator

2 个答案:

答案 0 :(得分:2)

这取决于您正在查看的表格的哪一列。

“总体”和“总体字节数”数字总是会上升,因为它们是分配的运行计数而不考虑解除分配。

但是,当分配了一个对象或内存块时,“Live Bytes”和“#Living”数字会上升,但是当它们被解除分配时应该会下降。

反复打开和关闭子视图应该(根据图像或数据缓存)悬停在固定数量的活字节和活动对象/内存块周围。

然而,正如您从屏幕截图中看到的那样,仪器有时会有点混淆。整个'#Transitory'列显示'0',这显然是不正确的。暂时性对象只是一个已被分配并随后被解除分配的对象,即它是一个非生命对象。

(#Living + #Transitory ==#Overall)

每当Instruments给我那一列零时,我就退出当前的运行并开始一个新的运行。

对于Leaks Instrument,它只会显示那些不再有指向它们的指针的对象或内存块。如果程序不断分配越来越多的对象/内存块但保留指针,Leaks Instrument将不会显示它们。

答案 1 :(得分:1)

那会不会有意义呢?每次在应用程序中执行某些操作时,可能会分配一些内容,例如您的不同子视图。因此,总分配将增加。这只是总分配的记录。