在iOS中泄漏内存

我运行了仪器的“泄漏”工具来testing我的应用程序是否有泄漏,并告诉我,我有一些泄漏。 我不是修理泄漏的专家,我想知道是否

  1. 我有一个泄漏,和
  2. 我该怎么办才能解决这个问题。

在这里输入图像说明

你似乎有泄漏,但看起来不大。 您可以点击内存地址旁边的小箭头,它应该带您进入一个屏幕,您可以在其中钻取并查看分配内存的位置,这是确定为什么不分配内存的第一步。 (我会启动非malloc对象,因为它们更直接地映射到您的代码,并且更容易诊断)。

但是,正如迈克·罗宾逊(Mike Robinson)所说,有时候你会看到像这样的微小泄漏,误报。 即使这不是误报,也可能来自操作系统本身,而不是你的代码。 因此,我们有时会经历一个真正强调应用程序的运动(例如,重复运行应用程序中似乎会产生泄漏的部分),以查看泄漏是如何迅速增长的。 它看起来像你的泄漏可能加起来不到1千字节左右,并不会继续增长,你可能会select不担心。 (或者至less一次,你已经感到满意,你的代码中没有任何东西导致它)。

就个人而言,我并不担心这些温和的泄漏,而是整体内存使用量的显着增长。 它可能只是一个适当的caching图像,或者它可能是一些遗弃的内存(泄漏工具不会显示给你)的迹象。 我会尝试模拟内存警告,看看有多less内存被恢复。 您也可以拖动时间线并转到分配视图,您可以看到该内存消耗的帐户。 您可能需要确保没有与“泄漏”工具报告的适度泄漏无关的更深的内存问题。 不是所有的内存问题都出现在“漏洞”中:“分配”增长也可能表明存在问题,我有点担心你没有看到你的内存使用率下降到稳态水平。

苹果公司分享了一个示例分配图,build议我们注意红色“浪费”的内存。 热身部分并不那么重要,中间水平也不是很高(只要不是太高 ),但稳态水平的提高表明存在更严重的记忆问题:

在这里输入图像说明

在你的情况,我没有看到应用程序回归到一个稳定的状态,这就是为什么我有点关注。 但是我不确定你有多less应用程序,或者是否有机会回到稳定状态。

如果您观看(有点过时但仍然相关的)WWDC 2013 Fixing Memory Issues ,它将会使用诊断和解决内存问题的工具和技术。 这是上面图表的来源,更详细的描述。 请注意,PDF演示文稿很好,但video更好,因为它包括使用仪器的一些实际演示。 WWDC 2012 iOS应用程序性能:内存也不错。 (看起来stream式传输video可能存在问题,但看起来您仍然可以下载video。)