2

我几乎完成了我的应用程序,并且在提交到应用程序商店之前,我正在使用 Instruments 来优化性能。我注意到,每当我执行特定操作(从外部服务器更新我的应用程序中的信息)时,我的堆就会增长大约 350 KB。我在 stackoverflow 和 Apple 的文档中找到的研究建议执行堆快照来查找有问题的代码。然而,它并没有把我带到有问题的代码,而是向我显示了内存地址。

有没有办法使用这些信息?还是我应该使用其他工具?我对 Instruments 很陌生,所以我很感激任何帮助。

我会显示一个屏幕截图,但我在这里的声誉还不够高。

4

2 回答 2

1

从 bbum 的教程开始:什么时候泄漏不是泄漏?

简短的回答是没有工具可以告诉您导致泄漏的确切代码行。系统不知道你在哪里犯了错误。它知道你什么时候分配了内存,它知道内存还没有被释放,但它无法知道你是否打算释放内存。它尤其不知道您应该何时释放内存,因为它无法知道您为什么首先分配它。

使用堆镜头,您可以发现额外的对象是什么,然后您可以从那里审核您如何使用这些对象。

于 2013-08-02T16:24:55.710 回答
1

几个想法:

  1. 在堆镜头中,不要忘记在最右侧的 Instruments 面板中显示扩展细节(+E或从“查看”菜单中选择“扩展细节”)。

    查看扩展详细信息时,它会显示一个堆栈跟踪,您可以在那里双击您的方法名称(它将是黑色而不是浅灰色),您将被带到生成分配的行(其中显然不是根本问题,但它会告诉你最初分配对象的位置,这是一个开始的地方)。

    在 heapshot 分析中查看扩展细节

  2. 话虽如此,我通常首先关注标准分配工具。我将option在顶部的分配工具时间线中拖动以突出显示此执行时间窗口内的分配,然后我将选择“调用树”,并只关注我的代码,我将检查“反转调用树” ”和“隐藏系统库”框:

    选项拖入分配工具

    对我来说,我发现这是一种更有效的方式来识别我在那个时间窗口内发生的分配,而无需筛选系统分配。

  3. 不要忘记通过 Xcode 中的静态分析器运行您的代码(shift++或在“产品”菜单上选择“分析”)B在你开始通过 Instruments 运行你的应用程序之前,你应该在那里获得一份干净的健康账单。

于 2013-08-02T17:07:02.410 回答