【问题标题】:Xcode Instruments can't detect retain cycle for strong delegate type?Xcode Instruments 无法检测强委托类型的保留周期?
【发布时间】:2017-10-05 07:08:30
【问题描述】:

我只花了一个小时试图修复我的代码中的保留周期。基本上是视图控制器在关闭后没有被释放。

但是,当我使用 Instruments 检查内存泄漏时,它通过了所有泄漏检查。请看下图。

问题是当我声明类协议时,我忘记将委托标记为弱......但是 Instruments 怎么没有注意到这个保留周期?

我对内存管理很陌生,如果我的问题很愚蠢,请理解。谢谢。 :)

【问题讨论】:

  • 是的,强引用循环(通常)不会被泄漏工具检测到。请参阅 stackoverflow.com/questions/30992338/… 了解用于查找此类问题的其他技术。
  • @Rob 很好的答案!谢谢!对于重复的问题,我们深表歉意。

标签: ios xcode memory-leaks instruments retain-cycle


【解决方案1】:

仪器以相当简单的方式检测泄漏 - 如果没有从实例指向根组件(例如 Application Delegate)的引用,则意味着该实例和保留它的所有实例都是内存泄漏,就像垃圾收集器一样。因此,如果说,您的父 ViewController 仅保留了另一个 ViewController(应该已经被释放回来),并且父 ViewController 仍然被根组件的引用链中的任何类保留,它不被视为泄漏。

【讨论】:

  • 你怎么知道分析是如何工作的?你有参考/文档吗?
  • @Basheer_CAD,这些结论是基于我自己的经验经验,如果我错了,请随时纠正我!
  • @AleksandrMedvedev 是正确的,因为没有引用的分配内存是内存泄漏的定义。要查找保留周期,您需要查看 Instruments 的“All Heap & Anonymous VM”部分。可视化内存调试也可能有所帮助。
猜你喜欢
  • 2016-04-02
  • 2015-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-25
  • 2016-05-03
  • 1970-01-01
相关资源
最近更新 更多