仪器泄漏,参考计数和自动释放

时间:2011-11-18 23:49:56

标签: cocoa-touch cocoa instruments memory-leaks

仪器报告我泄漏了NSDate变量。但是,如果我将保留和释放加起来,它应该能够通过自动释放池释放。可能我错了,但我不想确定。看看RefCt。 如果我[类别分配]它应该提出一个保留计数为1,那么如果我自动释放该对象,它应该能够释放,或者不是吗?

enter image description here

1 个答案:

答案 0 :(得分:6)

Instruments为您添加了保留和发布。这就是“RefCt”栏中显示的内容:运行总计。

  

如果我[类别分配]它应该得到保留计数1,...

确实如此;这是列表中的第一行。

  

...然后,如果我自动释放该对象,它应该可以释放,或者不是吗?

Autorelease不是立即-1;它会导致稍后发布, -1。

所以你有:

  1. 分配:+1(= 1)
  2. 自动释放:0现在;导致稍后发布(现在没有变化,所以仍然= 1)
  3. 保留:+1(= 2)
  4. 发布:-1(= 1)
  5. 保留:+1(= 2)
  6. 保留:+1(= 3)
  7. 发布:-1(= 2)
  8. 发布:-1(= 1)
  9. 请注意,三个版本中的一个是由Autorelease引起的版本。只有这样才发生了-1。

    该对象需要另一个版本才能被释放。在此之前,它不会。

    是的,有一个具有足够未完成自动释放的对象可能会在它们到来之前被杀死,因为它会在发生之前被保留,从而保持活着状态。我看到这种情况发生过一次我保留不足的物体,但那是Binding使用的属性的值; Binding保留了这个值,所以即使在我自己最后一次拥有它之后它仍保持活着。