检查 Instruments 中的内存分配
Posted
技术标签:
【中文标题】检查 Instruments 中的内存分配【英文标题】:Checking memory allocation in Instruments 【发布时间】:2010-11-06 20:51:46 【问题描述】:我已经使用泄漏工具清除了我的应用程序的泄漏,但我仍然注意到,当我切换视图时,objectalloc 工具在分配的对象数量和占用空间方面增加了。
我特别看到大量:
GeneralBlock-16,主要由 Foundation 负责调用者 NSLogv
和
GeneralBlock-0,主要负责 QuartzCore
关于我可以做些什么来进一步调试的任何提示?
谢谢!
【问题讨论】:
【参考方案1】:ObjectAlloc 工具旨在绘制随时间变化的总对象分配图,它不考虑解除分配。本质上:它会一直上涨。
您可以查看 Net Bytes 和 # Net 列。这些列将根据您解除分配的对象数量进行调整,如果您担心总的对象分配,您可以使用这些来衡量您的程序的性能。
您可以查看 Apple 支持论坛上的 this thread - 它更多地涉及 Instruments 测量的内容以及如何测试您的应用程序。
【讨论】:
对不起,也许我的问题不清楚。我知道对象分配总是上升,但是我指的是 Net Bytes 和 #Net 也永远不会下降,这令人担忧。在导航控制器中推送视图会大大增加这些数字,而弹出视图不会减少它们。此外,GeneralBlock-0 的绝对数量也令人不安。我真的很想知道为什么存在这么多 0 位对象。 这不太正确;您可以将分配工具配置为仅跟踪实时分配。在这种情况下,这些列将准确反映当前内存中的内容。 bbum 是对的,在 Xcode 4 中,Instrument 中的默认分配模板显示“所有分配”分解为列,同时显示实时字节和总字节。【参考方案2】:您应该查看http://developer.apple.com/videos/wwdc/2010/?id=311。
WWDC 2010 上关于使用 Instruments 进行内存分析的精彩视频。
【讨论】:
以上是关于检查 Instruments 中的内存分配的主要内容,如果未能解决你的问题,请参考以下文章
使用 Instruments 通过模态视图控制器改进内存管理
AVCaptureSession 废弃内存 - 分配 - 仪器