1

我刚刚消除了我的项目的泄漏,但在“GeneralBlock-0”类别下仍有数千个对象。净分配的数量是巨大的(在我输入时它接近一百万),但它们都不是泄漏,而且它们的大小都不大于 0 字节。

更新和编辑:

QuartzCore 负责所有有问题的对象。

负责的调用者是(按游戏循环每次迭代的执行顺序:

-[CALayer setPosition:]
x_hash_table_new_  // x2
hash_table_modify
-[CALayer setPosition:] // x9
-[CALayer(CALayerPrivate)_copyRenderLayer:flags:] //x13

在设备上运行时,在 GeneralBlock-64、128、256 等下分配 48 字节大小的对象,具有与上述相同的属性。这不可接受的,因为它显然会导致显着减速。这是我的项目中的问题被追踪到的代码:

topRow.center = CGPointMake(topRow.center.x,topRow.center.y-PIXELS_PER_FRAME);
while (nextRow = thisTopRow.below) { //stops running when thisTopRow.below is nil
    nextRow.center = CGPointMake(nextRow.center.x,nextRow.center.y-PIXELS_PER_FRAME);       
    if (nextRow.center.y+20 < 401 && !nextRow.userInteractionEnabled)
        [nextRow enableInteraction];        
    thisTopRow = nextRow;
}

我的印象是 CGPoint 是一种类型,并且会在代码块的末尾被释放。为什么会占用我的记忆?如果归根结底,我会将我保存在仪器中的跟踪文件上传给任何感兴趣的人,但我很确定我已经涵盖了所有内容。

4

3 回答 3

1

假设您可以复制模拟器下的行为,请检查以确保您的应用程序的 RSIZE 也没有在终端中使用“top -u”增加。

这很可能是因为 QuartzCore 已经实现了自己的分配器和分配区,但还没有完全融入 Instruments 使用的统计信息收集机制。

请提交一个错误。

于 2009-06-28T16:29:56.880 回答
0

同样的问题...在模拟器中分配了零字节,但在设备中,CALayer 中的每个方法调用都将我的内存提高了 48 字节。

这会导致内存问题。

穆拉利。

于 2009-07-15T14:25:46.570 回答
0

我也在处理这个问题。我正在使用其中包含一些 UIImageViews 的 UIScrollView,并且每次滚动视图的偏移量发生变化时,都会调用 -[CALayer(CALayerPrivate) _copyRenderLayer:flags:] 将内存提高 48 个字节。

再次——在模拟器上,这被记录为 0 字节,但在我的设备上,它不断地吞噬我的记忆。

于 2009-07-15T19:50:02.037 回答