XCODE工具分配增长

时间:2013-06-26 17:51:54

标签: ios xcode instruments ui-automation allocation

Allocation Graph

我在ios应用程序上运行uiautomation脚本。经过大约40次迭代:

登录 一遍又一遍地敲几个按钮 然后退出

我到达此图。

我的问题是关于分配图。它应该是这样的吗?我的脚本停止运行,我认为它是因为内存泄漏太多了?我知道泄漏的位置,并且它始终在同一个地方。但是随着时间的推移,分配图应该是这样的吗?我假设在理想的记忆意识应用中它基本上保持0斜率。但这对我来说意味着随着时间的推移还有很多分配?

问题:图表应该是这样的吗?如果正确释放内存(非弧),我正在做的步骤是否应该保持一个倾斜的分配图/随着时间的推移?

2 个答案:

答案 0 :(得分:6)

不,图表不应该是这样的。分配通常应该降低(除了缓存,甚至那些在内存压力下清除时应该回落)。

在你修复泄漏之前,没有必要担心分配问题。那可能会这样做。修复泄漏并重复上述练习,看看分配是否持平。如果没有,那么您可能还有其他问题。但修复泄漏可能会完全解决问题。

此外,如果您还没有,请通过静态分析器运行该工具(Xcode“Product”菜单上的“Analyze”或按 shift + 命令 + )。特别是在MRC代码中,这将识别许多例行的内存管理问题。这就像魔术一样。在继续之前,请确保在那里获得一份干净的健康状况。

然后使用Leaks工具确定准确泄漏的内容。然后,您可以诊断特定对象泄漏的原因。在继续之前修复泄漏。请参阅仪器用户指南的Finding Leaks部分。

完成所有这些后,您可以重复原始问题的过程,并查看分配是否继续增长(例如,可能是由保留周期引起的)。如果您在修复上述漏洞后仍然遇到问题,那么工具中的技术可以识别增量分配的类型,然后您可以使用这些技术来追踪任何进一步的问题(如果有的话)。

例如:

  • 运行Allocations工具,选项 - 在分配工具中单击并拖动,然后您可以查看调用树,它将显示正在消耗的内存。有关示例,请参阅this answer

  • 运行Allocations工具。让应用程序安定下来到一个静止点。单击“标记堆”按钮。做一堆东西。回到你认为应该释放东西的地步。再次按“标记堆”。现在查看该堆快照并查看已分配但未在两个快照之间发布的对象,并且您应该能够诊断正在进行的操作。

但是在你修复泄漏之前所有这一切都没有实际意义,Leaks工具会比其他任何工具更有效地指出泄漏的对象。首先修复,然后看看你的位置。

有关详细信息,您可能会发现WWDC 2012 iOS App Performance: Memory视频中的某些讨论很有用(特别是在演示部分中)。

答案 1 :(得分:1)

请检查“编辑方案:诊断”中是否已打开“僵尸”。僵尸永远不会被释放,如果您运行分配工具,则不会删除任何内容。