Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 对象是否在解除锁定和/或释放时自由/释放?_Objective C_Memory Management - Fatal编程技术网

Objective 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

我最近参加了一个objective-c测试,看看我会怎么做

结果证明我的分数远没有我希望的那么好。这意味着更多的学习

在测试期间,我被问到以下问题:

如何释放对象

A.[obj DEALOC]; B.[obj放行]; C.上述各项均不适用


我的选择是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环境如何?这就是我所想的。实际上,释放信号表明你已经放弃了所有权,不多不少。实际上,这通常意味着对象的保留计数将减少,但并不总是如此,例如,在释放常量字符串前后检查其保留计数。