每秒有数千个新的 0 大小对象添加到我的净总数中,我应该担心吗?
Posted
技术标签:
【中文标题】每秒有数千个新的 0 大小对象添加到我的净总数中,我应该担心吗?【英文标题】:Thousands of new 0 size objects being added to my net total every second, should I be worried? 【发布时间】:2009-06-27 18:48:29 【问题描述】:我刚刚消除了我的项目的泄漏,但在“GeneralBlock-0”类别下仍有数千个对象。净分配的数量是巨大的(在我输入时它接近一百万),但它们都不是泄漏,而且它们的大小都不大于 0 字节。
更新和编辑:
QuartzCore 负责所有违规对象。
负责的调用者是(按游戏循环每次迭代的执行顺序:
-[CALayer setPosition:]
x_hash_table_new_ // x2
hash_table_modify
-[CALayer setPosition:] // x9
-[CALayer(CALayerPrivate)_copyRenderLayer:flags:] //x13
在设备上运行时,48 字节大小的对象分配在 GeneralBlock-64、128、256 等下,具有与上述相同的属性。这是不可接受的,因为它显然会导致显着减速。 这是我的项目中的代码问题被追踪到:
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 是一种类型,并且会在代码块的末尾被释放。为什么会占用我的记忆?如果归根结底,我会将我保存在仪器中的跟踪文件上传给任何感兴趣的人,但我很确定我已经涵盖了所有内容。
【问题讨论】:
iCodeBlog.com 的 iTennis 中也出现了同样的问题,这是我用来入门的教程。一切都指向改变 UIImageView 的位置,无论是通过改变中心还是框架。 【参考方案1】:假设您可以复制模拟器下的行为,请检查以确保您的应用程序的 RSIZE 没有也在终端中使用“top -u”增加。
这很可能是因为 QuartzCore 已经实现了自己的分配器和分配区,但还没有完全融入 Instruments 使用的统计信息收集机制。
请提交错误。
【讨论】:
你把我弄丢了......你能用外行的话解释一下你想告诉我什么吗?top
命令显示有关进程的信息。 Bill 建议从终端运行 top 并观察您的应用程序的 RSIZE(驻留内存大小)的行为。他建议 Instruments 可能没有监控 QuartzCore 内存,它可能分配在与“普通”Objective-C 对象的默认值不同的区域(内存区域)中。基本上,如果 Instruments 说您有大量泄漏,但 top
显示 RSIZE 保持稳定,那么 Instruments 是错误的,因为它没有获得 QuartCore 内存的正确统计信息。如果是这样,请提交错误 - bugreport.apple.com【参考方案2】:
同样的问题... 在模拟器中分配了零字节,但在设备中,CALayer 中的每个方法调用都将我的内存提高了 48 个字节。
这会导致内存问题。
穆拉利。
【讨论】:
是的,你和 niv 遇到了和我一样的问题。我也只在设备上为每个 UIImageView 更改位置实例获得 48 字节分配成本,但我没有使用 UIScrollView。另外,请记住,当这篇文章没有提供问题的答案时,您已经发布了答案。以后,请使用问题下方的“添加评论”按钮发表评论,并保留“答案”部分以获取解决方案。【参考方案3】:我也在处理这个问题。我正在使用带有一些 UIImageViews 的 UIScrollView,每次滚动视图的偏移量发生变化时,都会调用 -[CALayer(CALayerPrivate) _copyRenderLayer:flags:] 将内存提高 48 个字节。
再一次——在模拟器上这被记录为 0 字节,但在我的设备上它一直在消耗我的记忆。
【讨论】:
这也是我遇到的一个问题。请参阅对 Murali 帖子的评论。作为新用户,这是您需要阅读的内容。以上是关于每秒有数千个新的 0 大小对象添加到我的净总数中,我应该担心吗?的主要内容,如果未能解决你的问题,请参考以下文章