2016-07-22 98 views
1

我运行了仪器的“泄漏”工具来测试我的应用程序是否有任何泄漏,并且它显示我有一些泄漏。我不是在固定泄漏的专家,我在想,如果在iOS中泄漏内存

  1. 我有一个泄漏,并
  2. 我应该怎么做来解决它。

enter image description here

+1

我会谨慎地回答:*“也许你做的,也许你不知道。*这些都是小的内存对象而且似乎只有少数几个,泄漏检测器*可能会被误认为,当你真的泄漏时,这个显示会持续很多页面。此外,随着时间的推移,列表将非常明显*延长,并且每当您看到它时,相同的地址将保留在列表中。如果这不是你(清楚地)看到的......你会清楚地知道它,当你看到它时......它可能是一个误报。 –

回答

4

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

但有时你会看到谦虚泄漏这样它们,麦克罗宾逊说,误报。即使这不是误报,它可能来自操作系统本身,而不是您的代码。因此,我们有时会经历一个真正强调应用程序的练习(例如,重复运行应用程序中似乎会产生泄漏的部分),以查看泄漏的增长速度(如果有的话)。它看起来像你的泄漏可能加起来不到1千字节左右,并且不会继续增长,你可能会选择不担心它。 (或者至少一次,你已经对自己的代码没有任何东西感到满意了)。

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

苹果共享一个例子分配图,建议我们要提防红色的“浪费”了的记忆。暖机部不是那么关键的,也不是将中间电平(只要它不是高),但稳态水平的生长是一个更严重的存储器的问题的指示:

enter image description here

就你而言,我没有看到应用程序完全恢复到稳定状态,这就是为什么我有点关注。但是我不确定你使用了多少应用程序,或者是否让它有机会回到稳定状态。

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

+0

伟大的答案罗布! –