ARC循环保留检测

时间:2012-02-04 08:48:58

标签: iphone objective-c ios xcode automatic-ref-counting

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

3 个答案:

答案 0 :(得分:26)

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

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

答案 1 :(得分:16)

最好的方法通常是使用the Leaks instrument in the Instruments app

来自WWDC 2011新功能视频讨论了如何使用Instruments在ARC下查找保留周期,大约需要38分钟。

答案 2 :(得分:0)