仪器泄漏,引用计数和自动释放。

5
仪器报告了NSDate变量泄漏的情况。但是如果我添加保留和释放,应该可以通过自动释放池来释放它。可能我计算得不对,但我想确保一下。看一下RefCt。 如果我使用[Class alloc],它应该具有1个保留计数,然后如果我将该对象自动释放,它应该能够释放,还是不行?
1个回答

6
仪器为您累加保留和释放。这就是“RefCt”列向您展示的内容:运行总数。
如果我 [Class alloc],它应该显示一个保留计数为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)
请注意,其中三个释放中的一个是由自动释放引起的。只有在那之后才会发生-1。
该对象需要另一个释放才能被释放。在发生这种情况之前,不会被释放。
是的,当一个对象有足够的未完成自动释放时,在它们到期之前被保留并因此保持活动状态是可能的。我曾经看到过这种情况发生在一个我保留不足的对象上,但那是一个绑定使用的属性值;绑定保留了该值,因此即使我自动释放了我自己对其的最后所有权,它仍然保持活动状态。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接