2016-10-01 48 views
0

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

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

我的问题是:

  1. 为什么我不能看到这些堆数量庞大?
  2. 这个庞大的内存在哪里分配?
  3. 是否有反映此拥抱数字的特定详细视图(Call Tree除外)?

请注意,我不是问什么是为视图拍摄快照的最佳方式。我已经熟悉Apple method snapshotView。我正在做这个练习只是为了测试我对iOS中内存使用的理解。

回答

3

一对夫妇的想法:

  1. 过滤调用树的结果时要小心。您可能意外删除了分析器关联内存的例程。尝试(a)选择具有问题分配的图表的范围(以减少结果中的噪声量); (b)去除过滤器,然后(c)扩充树在这一点上,你看到的大内存跳跃:

    look for jump

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

    enter image description here

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

    enter image description here

    然后,您可以钻入认为:

    enter image description here

    ,然后通过单击右侧的“扩展详细信息”面板上,跳转到代码中的问题:

    enter image description here

  4. 如果需要,另一种在Xcode 8中查找分配的方法是在你的方案上打开“Malloc Stack”选项,然后使用“Debug Memory Graph”选项s在https://stackoverflow.com/a/30993476/1271826中概述。例如,我使用了“调试内存图”,找到了CG栅格数据,我可以看到这个10mb图像的对象图,以及可以看到在“扩展详细信息“面板右侧:

    enter image description here

+0

罗布感谢您的答案,但我不知道我怎么能涉及您的答案,我的3个相关的问题? –

+0

你的第一个问题是“为什么我没有看到分配”在我的调用树中,我的回答是“(a)不要像你那样过滤调用树;并且(b)确保选择围绕有问题的分配“。你的第二个问题是“这个大分配是从哪里来的”,没有人能为你解答,也没有向你展示识别分配的不同方法(并且我向你展示了三种不同的方法来完成这个任务)。你的第三个问题是寻找分配的其他机制是什么,再次,我向你展示了一些替代方案。我不知道我还能做什么。 – Rob

+0

感谢罗布为你的答案,但巨大的记忆不会出现没有任何过滤器,这是因为你的答案不帮助我。至于b,你没有回答。最后为c,我真的很感激你的重要选择,但他们都没有透露这个巨大的记忆。因此,我将等待社区中任何可能帮助我回答这些问题的投入。再次感谢。 –