ARC循环保留检测

Gri*_*ess 10 iphone xcode objective-c ios automatic-ref-counting

我将一些旧代码移植到Objective-C ARC(自动引用计数),它看起来效果很好.当一个相当大的高级对象从我的导航堆栈弹出时没有被释放,让我相信我有一个ARC隐藏在我身边的某个保留周期(或者至少很难跟踪).清除这个潜在保留周期的最佳方法是什么和/或什么是确定ARC下内存泄漏原因的好方法?谢谢!

Tod*_* J. 26

我只是转换了一个较旧的应用程序来使用ARC.仪器没有泄漏,但分配继续增加.我发现通过查看我知道应该删除的内容的实时对象,我能够在没有发布的情况下追踪保留.以下是基本步骤:

  1. 使用仪器中的分配工具
  2. 玩你的应用程序一段时间(如果你知道什么没有发布,这会更快)
  3. 将统计信息更改为"分配"跳转栏中的对象
  4. 按类别排序,找到未发布对象的类名
  5. 找到一个活动实例,然后单击内存地址旁边的小右箭头
  6. 现在,您可以查看对象的保留和释放历史记录

仪器中对象历史的屏幕截图


rob*_*off 16

最好的方法通常是在仪器应用程序中使用Leaks仪器.

来自WWDC 2011的 " 什么是新的仪器"视频讨论了使用仪器在ARC下找到保留周期,从大约38分钟开始.