我写了一个应用程序,并测试它的内存泄漏时,我注意到泄漏模拟器中的“所有分配”类别不断增加其大小,每当我打开和关闭一个子视图。
我最初认为这是一个内存泄漏,但它没有显示为泄漏选项卡中的泄漏。
这是正常的吗?

发布于 2010-09-15 04:11:55
这是有道理的,不是吗?每次你在应用程序中做一些事情时,可能会分配一些东西,比如你的不同子视图。因此,总分配会增加,这只是总分配的记录。
发布于 2011-02-24 21:00:26
这取决于您正在查看的表的哪一列。
“总”和“总字节”数字将始终上升,因为它们是没有考虑释放的分配的运行计数。
然而,当一个对象或内存块被分配时,'Live Bytes‘和'# Living’数字应该上升,但当它们被释放时,应该下降。
重复地打开和关闭一个子视图(受制于图像或数据缓存)应该停留在固定数量的活动字节和活动对象/内存块周围。
然而,正如您从屏幕截图中所看到的,仪器有时会有点混乱。整个'# Transitory‘列显示的是'0',这显然是不正确的。一个暂时的对象只是一个已经被分配然后又被释放的对象,也就是说,它是一个非活动的对象。
(# Living +#暂时性== #总体)
每当Instruments给我那一列0时,我就退出当前运行并开始一个新的运行。
至于泄漏工具,它将只显示那些不再有任何指针指向它们的对象或内存块。如果程序不断地分配越来越多的对象/内存块,但保留了指向它们的指针,则泄漏工具不会显示它们。
https://stackoverflow.com/questions/3712376
复制相似问题