【发布时间】:2012-01-01 16:46:16
【问题描述】:
Instruments 向我报告 NSDate 变量泄漏。但是,如果我将保留和释放加起来,我认为它应该能够通过自动释放池释放。可能我数错了,但我不能确定。看看 RefCt。 如果我 [Class alloc] 它的保留计数应该为 1,那么如果我自动释放该对象,它应该能够释放,或者不是吗?
【问题讨论】:
标签: cocoa-touch cocoa instruments memory-leaks
Instruments 向我报告 NSDate 变量泄漏。但是,如果我将保留和释放加起来,我认为它应该能够通过自动释放池释放。可能我数错了,但我不能确定。看看 RefCt。 如果我 [Class alloc] 它的保留计数应该为 1,那么如果我自动释放该对象,它应该能够释放,或者不是吗?
【问题讨论】:
标签: cocoa-touch cocoa instruments memory-leaks
Instruments 会为您添加保留和释放。这就是“RefCt”列向您显示的内容:运行总计。
如果我 [Class alloc] 它应该提出保留计数为 1,...
确实如此;这是列表中的第一行。
...那么如果我自动释放该对象,它应该能够释放,或者不是吗?
自动释放不是立即的 -1;它会导致稍后发布,那是 -1。
所以你有:
请注意,三个 Release 之一是由 Autorelease 引起的。只有这样才会产生 -1。
对象需要另一个释放才能被释放。在那之前,它不会发生。
是的,如果一个对象有足够多的未完成的自动释放来杀死它,因为在此之前被保留并因此保持活动状态是可能的。我曾经看到一个我保留不足的对象发生这种情况,但那是绑定使用的属性的值; Binding 保留了该值,因此即使在我自动释放了我自己的最后一次所有权之后,它仍然保持活动状态。
【讨论】: