free,dealloc,release和autorelease之间有什么区别?
有人可以解释free()
, release
, autorelease
和dealloc
之间的区别吗?
free()
是一个C函数,用于处理通过malloc()
获得的不再需要的内存,或者记录为需要free()来释放其内存的其他函数,例如strdup()
。
-dealloc
是一个Objective-C选择器,当对象不再由应用程序的任何部分拥有时,由Objective-C运行时发送给对象。
-release
是您发送给对象的选择器,表示您放弃该对象的所有权。 一旦对象不属于任何人,运行时就会发送-dealloc
消息。
-autorelease
是您发送给对象的选择器,表示您放弃对象的所有权。 但是,如果现在没有人拥有该对象,则最终的-dealloc
将被推迟到某个未指定的稍后点。 事实上,你真正在做的是将你的所有权转移到自动释放池,然后在它自己被释放(或耗尽)时释放它。
除了对象自己的-dealloc
方法中的super
之外,你绝不-dealloc
发送给对象。
在你提到的4种方法中,你通常只在objective-c中使用release
和autorelease
。 当你使用c和malloc
时可以使用free
,否则你应该使用release
和autorelease
。
任何代码都不应调用dealloc
,因为它可能会干扰objective-c用于跟踪资源的保留/释放周期。 如果您使用dealloc
几乎肯定会在运行时导致崩溃。
使用release
和autorelease
的最终资源是Apple内存管理文档
-
free
与malloc
相反,在C中使用。你可能不会在Objective C中使用它 - 如果您拥有一个对象,则在完成后将其
release
- 您还可以
autorelease
对象。 这会在当前运行循环迭代结束时自动释放它 - 当对象上的引用计数
dealloc
零时,运行时调用dealloc
。 你不应该自己调用这个方法
如果您alloc
, new
, retain
或copy
它,您“拥有”一个对象。
Apple就此提供了一些很好的文档 。