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

the*_*end 5 cocoa cocoa-touch memory-leaks instruments

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

在此输入图像描述

Pet*_*sey 6

Instruments会为您添加保留和发布.这就是"RefCt"栏中显示的内容:运行总计.

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

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

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

自动释放不是立即-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)

请注意,三个版本中的一个是由Autorelease引起的版本之一.只有这时才招致-1.

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

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