Xcode显示内存泄漏,但是仪器没有

时间:2015-10-12 18:00:59

标签: ios xcode swift memory-leaks instruments

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

enter image description here

当我呈现一个自定义的ViewController时,内存会增加,但是当我解除它时它不会再回落。

所以我也使用了仪器的分配工具进行了检查,但这说明了一个不同的故事:

enter image description here

正如您所看到的,当我呈现ViewController时,Instruments会显示尖峰,但是当它被解除时,内存使用量会回落到之前的水平。

我已经检查了我的代码至少15次,我个人找不到任何内存泄漏,因此与仪器达成一致。我还在我的所有对象中实现了deinit函数,它将被分配如下:

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

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

可能发生什么事?我正在使用:

  • iOS 9.0
  • XCode 7.0版(7A220)
  • Swift 2.1

Run和Profile的模式都在“debug”

3 个答案:

答案 0 :(得分:6)

如果您从Apples的角度看,它是一个非常恼人的Xcode错误或者可能是一个功能:)。

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

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

  2. 选择'编辑方案'

  3. 选择'运行' (弹出窗口的左侧)

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

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

  6. 缺点是如果崩溃,将禁用回溯。所以我想你想根据你想要关注的内容来切换那个开关。

    在'个人资料中' scheme没有启用回溯,因此在使用调试导航器(运行方案)而不是仪器(配置文件方案)时只看到内存泄漏。

    /安德斯。

答案 1 :(得分:3)

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

答案 2 :(得分:2)

在更多工具使用经验之后更新以前的文本。

enter image description here

在最近使用Xcode 7.2.1中的Instruments进行的一些实验之后,我注意到Leaks图表并不总是有效。在杀死仪器和模拟器的过程后,再次运行...图表出现了。似乎存在间歇性问题,但尚未找到原因。

enter image description here