iOS Instrumentation:如何解释内存分配模板?

时间:2016-10-01 17:16:32

标签: ios memory xcode-instruments

我正在为iOS Instrumentation使用Allocations Profiling模板。 我创建了一个UIView类的扩展,它为未添加到视图层次结构的视图获取快照。我想仔细检查我的新方法消耗了多少内存。 我发现我的新方法从堆中分配288字节,如下图所示。  enter image description here

然后我导航到相应的方法,我发现有一个很大的内存量,如预期的那样。看看下面的图片。 enter image description here

我的问题是:

  1. 为什么我不能在堆中看到这些巨大的数字?
  2. 这个巨大的内存分配在哪里?
  3. 是否有反映此拥抱编号的特定详细视图(Call Tree除外)?
  4. 请注意,我不是在询问为视图拍摄快照的最佳方法。我已熟悉Apple method snapshotView。我正在做这个练习只是为了测试我对iOS中内存使用的理解。

1 个答案:

答案 0 :(得分:3)

有几点想法:

  1. 过滤调用树的结果时要小心。您可能会意外地删除了探查器与内存关联的例程。尝试(a)选择具有相关分配的图表范围(以减少结果中的噪声量); (b)删除过滤器,然后(c)在你看到大内存跳转的那一点展开树:

    fiddle

  2. 就个人而言,我经常发现翻转调用树和隐藏系统库更容易:

    look for jump

  3. 或者,您也可以转到“分配”的“统计”并查找大分配:

    enter image description here

    然后您可以深入研究:

    enter image description here

    然后点击右侧的“扩展详细信息”面板,跳转到相关代码:

    enter image description here

  4. 如果需要,在Xcode 8中查找分配的另一种方法是打开方案中的“Malloc Stack”选项,然后使用enter image description here中概述的“Debug Memory Graph”选项。

    例如,我使用了“调试内存图”,找到了CG光栅数据,我可以看到这个10mb图像的对象图,并且可以看到在“扩展细节”中分配的堆栈右边的小组:

    https://stackoverflow.com/a/30993476/1271826