【问题标题】:iOS Instrumentation: how to interpret Memory Allocations Template?iOS Instrumentation:如何解释内存分配模板?
【发布时间】:2016-10-01 17:16:32
【问题描述】:

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

然后我导航到相应的方法,我发现内存量如预期的那样大。看看下面的图片。

我的问题是:

  1. 为什么我在堆中看不到这些巨大的数字?
  2. 这么大的内存是从哪里分配的?
  3. 是否有反映此拥抱数字的特定详细视图(调用树除外)?

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

【问题讨论】:

    标签: ios memory xcode-instruments


    【解决方案1】:

    一些想法:

    1. 过滤调用树的结果时要小心。您可能不小心删掉了分析器与内存关联的例程。尝试(a)选择具有问题分配的图形范围(以减少结果中的噪声量); (b) 移除过滤器,然后 (c) 在您看到大内存跳跃的那一点展开树:

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

    3. 或者,你也可以去“Allocations”的“Statistics”找到大的分配:

      然后您可以深入了解:

      然后通过点击右侧的“Extended Detail”面板,跳转到有问题的代码:

    4. 如果您愿意,另一种在 Xcode 8 中查找分配的方法是在您的方案中打开“Malloc Stack”选项,然后使用 https://stackoverflow.com/a/30993476/1271826 中所述的“Debug Memory Graph”选项。

      例如,我使用了“Debug Memory Graph”,找到了 CG Raster Data,我可以看到这个 10mb 图像的对象图,以及在“Extended Details”中看到分配的堆栈右侧面板:

    【讨论】:

    • 感谢 Rob 的回答,但我不确定如何将您的回答与我的 3 个相关问题联系起来?
    • 您的第一个问题是“为什么我在调用树中看不到分配”,我的回答是“(a)不要像你那样过滤调用树;和(b)确保围绕相关分配选择范围”。您的第二个问题是“这么大的分配来自哪里”,没有人可以为您回答,没有向您展示识别分配的不同方法(我向您展示了三种不同的方法来实现这一点)。您的第三个问题是还有哪些其他机制可用于查找分配,我再次向您展示了许多替代方案。我不知道我还能做什么。
    • 感谢 Rob 的回答,但是没有任何过滤器就不会出现巨大的内存,因此您对 a 的回答对我没有帮助。至于b,你没有回答。最后对于 c,我真的很感谢你的重要选择,但没有一个能透露出这个巨大的记忆。因此,我将等待社区中任何其他可能帮助我回答这些问题的意见。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 2018-01-23
    • 2011-02-12
    • 2021-11-28
    • 2013-12-15
    • 2020-11-09
    相关资源
    最近更新 更多