在dealloc和/或释放时是否释放对象?

时间:2010-07-11 20:24:21

标签: objective-c memory-management

我最近做了一个客观的测试,看看我会怎么做。

原来我的得分并不像我希望的那么好。这意味着更多的学习。

在测试期间,我被问到这个问题:

你如何释放一个物体?

一个。 [obj dealloc]; B. [obj发布]; C.以上都不是

我的选择是A,我不知道它是否正确。问题是混乱:不释放调用dealloc,因此实现相同的结果?

3 个答案:

答案 0 :(得分:7)

没有。 release递减对象的引用计数。

您不直接致电dealloc。调用release减少引用计数,并在引用计数变为零时让运行时调用dealloc

答案 1 :(得分:0)

是的,release确实会调用dealloc,但只有在减少引用计数后才会调用,并且仅在引用计数为零时调用NSObject class reference表示release

"Decrements the receiver’s reference count."  

"The receiver is sent a dealloc message when its reference count reaches 0."

答案 2 :(得分:0)

我知道答案已被接受,但我无法抗拒添加自己的想法。

测试问题的答案在技术上是C.您不会释放对象,运行时会在认为它们不再使用时释放它们。

如果您在引用计数环境中释放对象,则不会释放它,仅表示您放弃任何所有权声明。当没有人拥有所有权声明时,运行时将调用dealloc并释放该对象。同样,在垃圾收集环境中,当您覆盖引用时,表示您不再对它感兴趣。一旦所有引用都消失了,在稍后的某个不确定时间,将finalize发送到该对象并释放该对象。