在iOS中泄露内存

时间:2016-07-22 16:26:26

标签: ios memory-leaks

我跑了乐器' Leaks'用于测试我的应用程序是否有任何泄漏的工具,它向我显示我有一些泄漏。我不是修理泄漏的专家,我想知道是否

  1. 我有泄漏,
  2. 我应该怎么做才能解决它。
  3. enter image description here

1 个答案:

答案 0 :(得分:5)

你似乎有泄漏,但看起来很温和。您可以单击内存地址旁边的小箭头,它应该会显示一个屏幕,您可以在其中钻取并查看内存的分配位置,这是确定它未被解除分配的原因的第一步。 (我开始使用非malloc个对象,因为它们通常会更直接地映射到您的代码,并且它更容易诊断。

但有时候你会看到像迈克罗宾逊所说的那样适度的泄密,这些泄漏是误报。即使它不是误报,也可能来自操作系统本身,而不是代码。因此,我们有时会通过练习强调应用程序(例如,反复运行应用程序中似乎会产生泄漏的部分)来查看泄漏增长的速度,如果有的话。看起来您的泄漏可能会增加到不到1千字节左右,并且不会继续增长,您可能会选择不担心它。 (或者至少一旦你对自己感到满意,你的代码中没有任何东西导致它。)

但是,就个人而言,我对这些适度泄漏的关注程度低于整体内存使用量的显着增长。它可能只是一个适当的图像缓存,或者它可能是一些废弃记忆的标志(泄漏工具不会告诉你)。我尝试模拟内存警告,看看有多少内存被恢复。您还可以在时间轴上拖动并转到分配视图,您可以查看该内存消耗的帐户。您可能希望确保没有更深层次的内存问题,这些问题与" Leaks"报告的适度泄漏无关。工具。并非所有的记忆问题都出现在" Leaks":" Allocations"增长也可以表明存在问题,我有点担心你没有看到你的内存使用量下降到某个稳态水平。

Apple分享了一个示例分配图,建议我们注意红色"浪费"记忆。预热部分不是那么关键,也不是中间级别(只要它不高),但稳态级别的增长表明存在更严重的内存问题:

enter image description here

在你的情况下,我根本没有看到应用程序恢复到稳定状态,这就是我有点担心的原因。但是我不确定你运用了多少应用程序,或者你是否给它机会重返稳定状态。

如果您观看(有点过时,但仍然相关)WWDC 2013 Fixing Memory Issues,它将为您提供诊断和解决内存问题的工具和技术。这是上面图表的来源,并对其进行了更详细的描述。请注意,PDF演示文稿很好,但视频要好得多,因为它包含一些使用乐器的实际演示。 WWDC 2012 iOS App Performance: Memory也很好。 (看起来流媒体视频可能有问题,但看起来你仍然可以下载它。)