【问题标题】:Xcode shows memory leak, but Instruments does notXcode 显示内存泄漏,但 Instruments 没有
【发布时间】:2016-01-10 07:19:07
【问题描述】:

当我从 Xcode 运行我的应用程序时,很明显我有内存泄漏:

当我展示一个自定义 ViewController 时,内存会增加,但当我关闭它时,它并没有回落。

所以我也使用 Instruments 的 Allocation 工具进行了检查,但这讲述了一个不同的故事:

如您所见,当我展示 ViewController 时,Instruments 会显示峰值,但当它被关闭时,内存使用量会回落到之前的水平。

我已经检查了我的代码至少 15 次,我个人没有发现任何内存泄漏,因此同意 Instruments。我还在我的所有对象中实现了deinit 函数,这些对象会像这样分配:

deinit {
  print("Deinnited \(id)")
}

所有对象都按预期打印到控制台。

会发生什么?我正在使用:

  • iOS 9.0
  • XCode 版本 7.0 (7A220)
  • 斯威夫特 2.1

Run 和 Profile 的模式都在“调试”中

【问题讨论】:

  • 只是检查,但您如何消除这些意见?还有空闲时间吗?我发现仪器往往只显示软件方面。它不会向您显示尚未清理的 ram。当没有空闲时间时,操作系统无法清理内存。你有单身人士吗?或用于兑现的共享实例?可能是一个强大的参考周期。尝试将东西设置为弱。只是到处乱想......
  • 如果你多次重复打开关闭,你会发现 Xcode 中的内存消耗在增加吗?
  • @Darko 是的。我在 Xcode 中看到内存消耗在增加,但在仪器中没有看到
  • 我的意思是它会不断上升,直到你经历崩溃?为此,您必须直接在设备上进行调试。
  • @Menke 我在父视图控制器上使用了dismissViewController。我对所有代表都使用弱引用。我没有单身人士。我已多次检查我的代码,但找不到任何强引用循环。

标签: ios xcode swift memory-leaks instruments


【解决方案1】:

经过对 Google 和其他论坛的大量研究,这似乎是 XCode 的一个错误。

【讨论】:

    【解决方案2】:

    在获得更多工具使用经验后更新之前的文字。

    在最近使用 Xcode 7.2.1 中的 Instruments 进行了一些实验后,我注意到泄漏图表并不总是有效。杀掉 Instruments 和模拟器的进程后,再次运行……图表出现了。好像是间歇性的问题,还没找到原因。

    【讨论】:

    • 这对我来说并没有揭示问题。我能够使用泄漏配置文件模板进行配置,并且我发现泄漏没有发生,因为我继续进行泄漏检查,每次都通过。 Xcode 7.x 的内置内存分析器肯定有问题。 Instruments 显示“Persistent Bytes”在应用程序的整个生命周期内保持稳定,而“Total Bytes”继续增长。我的猜测是他们在 Xcode 中使用了错误的字段,因为该数字非常接近在 Instruments 中进行分析时显示的“总字节数”值。
    • 最近在 Xcode 7.2.1 中使用 Instruments 进行了一些实验后,我注意到泄漏图表并不总是有效。杀掉 Instruments 和模拟器的进程后,再次运行……图表出现了。似乎有间歇性问题,尚未找到原因。
    • @DouglasFrari 你能帮我解决这些问题吗?
    【解决方案3】:

    如果您从 Apple 的角度来看,这是一个非常烦人的 Xcode 错误或者可能是一个特性 :)。

    我今天确实遇到了,这里是如何解决它。

    1. 按您设置方案的应用程序名称(在 xcode 中的停止按钮旁边)

    2. 选择“编辑方案”

    3. 选择“运行”(弹出窗口左侧)

    4. 选择“选项”(弹出窗口的顶部)

    5. 取消选中“启用回溯记录”(您需要向下滚动的最后一个选择)

    不利的一面是,如果您崩溃,回溯将被禁用。所以我猜你想根据你想要关注的内容来切换那个开关。

    在“配置文件”方案中,未启用回溯,因此您只在使用调试导航器(运行方案)时看到内存泄漏,而不是在仪器(配置文件方案)中。

    /安德斯。

    【讨论】:

      猜你喜欢
      • 2011-10-10
      • 2019-10-20
      • 2011-03-13
      • 2023-04-10
      • 2017-05-26
      • 2012-05-30
      • 2019-06-20
      • 1970-01-01
      • 2011-06-20
      相关资源
      最近更新 更多