Objective c 对象是否在解除锁定和/或释放时自由/释放?
我最近参加了一个objective-c测试,看看我会怎么做 结果证明我的分数远没有我希望的那么好。这意味着更多的学习 在测试期间,我被问到以下问题: 如何释放对象 A.[obj DEALOC]; B.[obj放行]; C.上述各项均不适用Objective c 对象是否在解除锁定和/或释放时自由/释放?,objective-c,memory-management,Objective C,Memory Management,我最近参加了一个objective-c测试,看看我会怎么做 结果证明我的分数远没有我希望的那么好。这意味着更多的学习 在测试期间,我被问到以下问题: 如何释放对象 A.[obj DEALOC]; B.[obj放行]; C.上述各项均不适用 我的选择是A,我不知道是否正确。这个问题令人困惑:不释放调用dealloc,从而获得相同的结果?否。release减少对象的引用计数 您不能直接调用dealloc。调用release以减少引用计数,并在引用计数变为零时让运行时调用dealloc。是,relea
我的选择是A,我不知道是否正确。这个问题令人困惑:不释放调用dealloc,从而获得相同的结果?否。
release
减少对象的引用计数
您不能直接调用
dealloc
。调用release
以减少引用计数,并在引用计数变为零时让运行时调用dealloc
。是,release
只在减少引用计数之后,并且仅在引用计数变为零时调用dealloc
。上面说,发布
:
"Decrements the receiver’s reference count."
"The receiver is sent a dealloc message when its reference count reaches 0."
我知道这个问题的答案已经被接受了,但我忍不住添加了自己的想法 测试问题的答案在技术上是C。你不释放对象,运行时在认为它们不再使用时释放它们
如果在引用计数环境中释放对象,则不会释放它,而只是表示放弃任何所有权声明。当没有人拥有所有权声明时,运行时调用dealloc并释放对象。类似地,在垃圾收集环境中,当您覆盖引用时,表示您对它不再感兴趣。一旦所有引用都消失,在以后的某个不确定的时间,finalize将被发送到对象并释放该对象 但这并不意味着发布链调用dealloc。GC将在参考检查时发送该dealloc。只是想澄清一下。GC永远不会发送
dealloc
。非GC环境如何?这就是我所想的。实际上,释放信号表明你已经放弃了所有权,不多不少。实际上,这通常意味着对象的保留计数将减少,但并不总是如此,例如,在释放常量字符串前后检查其保留计数。