free,dealloc,release和autorelease之间有什么区别?

ar1*_*106 16 c cocoa-touch memory-management objective-c

有人可以解释之间的差异free(),release,autoreleasedealloc

Jer*_*myP 18

free()是一个C函数,用于处理通过malloc()其他函数记录的不再需要的内存,以及需要free()来解除其内存的其他函数,例如strdup().

-dealloc 是一个Objective-C选择器,当对象不再由应用程序的任何部分拥有时,由Objective-C运行时发送到对象.

-release是您发送给对象的选择器,表示您放弃了该对象的所有权.一旦对象不归任何人所有,它就会-dealloc被运行时发送给消息.

-autorelease是您发送给对象的选择器,表示您放弃对象的所有权.但是,如果现在没有人拥有该对象,则最终-dealloc将推迟到某个未指定的后续点.事实上,你真正在做的是将你的所有权转移到一个自动释放池,然后它会在它自己被释放(或耗尽)时释放它.

-dealloc除了super在对象自己的-dealloc方法中,您必须永远不会发送到对象.


Jam*_*uld 3

在您提到的 4 种方法中,您通常只会在 Objective-C 中使用release和。可能在您使用过 c 时使用,否则您应该使用and 。autoreleasefreemallocreleaseautorelease

dealloc不应由您的任何代码调用,因为它可能会干扰 Objective-C 用于跟踪资源的保留/释放周期。如果您使用它,dealloc几乎肯定会导致运行时崩溃。

使用的最终资源releaseautoreleaseApple内存管理文档