了解 Alloc 的 Instruments 结果中的负责任调用者

Posted

技术标签:

【中文标题】了解 Alloc 的 Instruments 结果中的负责任调用者【英文标题】:Understanding responsible callers in Instruments Results for Alloc 【发布时间】:2011-11-29 10:51:14 【问题描述】:

我正在使用工具来确定消耗更多内存的原因。我总是让生活字节和整体字节相同。我相信我的代码中没有发生太多的释放。这是一个不好的迹象。

当我去寻找负责任的来电者并追查它是什么时,我找不到它。负责的调用者是 _dydldstart 和 NSStringFromClass。

这种行为正常吗?如何检查确切的负责呼叫者?

【问题讨论】:

【参考方案1】:

Living Bytes 和 Total Bytes 列相同的原因很可能是 Instruments 仅跟踪活动分配。如果您希望 Instruments 跟踪所有内容,请单击工具列表中 Allocations 工具旁边的 Info 按钮,然后取消选中 Only track active allocations 复选框。

打开扩展详细信息视图会显示内存分配的调用堆栈,这样可以更轻松地找到确切负责的调用者。选择“视图”>“扩展详细信息”以打开扩展详细信息视图。

调用树视图还可以帮助您确定在代码中分配内存的位置。使用跳转栏切换到调用树视图。

【讨论】:

【参考方案2】:

“我总是让生活字节和总字节相同”。

我遇到这个问题只是因为我在 Instruments 中测试我的应用程序时将 NSZombieEnabled 设置为环境变量。禁用该变量后,问题就消失了。

NSZombieEnabled 我认为不会让任何变量被释放。

我不确定删除 NSZombieEnabled 是否解决了问题。

我实际上以两种不同的方式使用分配。只有与 Leaks Tool 一起使用时,我才遇到问题。

我的另一个问题是对这个问题的回答:

Ambiguities in using Instruments for ios Development

【讨论】:

以上是关于了解 Alloc 的 Instruments 结果中的负责任调用者的主要内容,如果未能解决你的问题,请参考以下文章

Instruments 使用 sprite kit 模板分配图表

如何在 Instruments 上跟踪 UI 事件

了解 Xcode 中的 Instruments,测试泄漏

我应该使用哪些 Instruments 工具来了解我的 Monotouch 应用程序的内存使用情况?

使用instrument-->Allocations进行内存分析

从 Instruments 读取内存分配结果