有人能解释一下
free()
、release
、autorelease
和dealloc
之间的区别吗?free()
、release
、autorelease
和dealloc
之间的区别吗?free()
是C语言的一个函数,用于释放通过malloc()
或其他已记录需要使用free()
来释放内存的函数获得的不再需要的内存,例如strdup()
。
-dealloc
是Objective-C选择器,当对象不再是应用程序的任何部分所拥有时,Objective-C运行时会向对象发送此选择器。
-release
是您发送给对象的选择器,以指示您放弃对该对象的所有权。一旦没有任何人拥有该对象,运行时将向其发送-dealloc
消息。
-autorelease
是您发送给对象的选择器,以指示您放弃对该对象的所有权。但是,如果现在没有任何人拥有该对象,则最终的-dealloc
将被推迟到某个未指定的稍后时间点。实际上,你正在将所有权转移给一个自动释放池,该池在被释放(或排空)时将释放它。
除了在对象自己的-dealloc
方法中向super
发送之外,绝不能向对象发送-dealloc
。
release
和autorelease
这两种方法。当你使用C时,可能会使用free
,否则应该使用release
和autorelease
。
dealloc
不应被任何代码调用,因为它会干扰Objective-C所使用的保留/释放生命周期来跟踪资源。如果你使用dealloc
,几乎肯定会在运行时崩溃。release
和autorelease
的最终资源,可以查看Apple内存管理文档。free
是 C 语言中与 malloc
相对应的函数。在 Objective C 编程中,你可能不会经常使用它。release
方法将其释放。autorelease
方法来自动释放对象,它会在当前运行循环结束时释放对象。dealloc
方法。你不应该自己调用这个方法。如果你使用了 alloc
、new
、retain
或 copy
方法来创建一个对象,那么你就是这个对象的所有者。
Apple 提供了一些关于内存管理的优秀文档。
init
的对象,你拥有一个你用new
、alloc
或包含单词copy
的方法创建的对象。你还拥有一个你保留的对象。 - JeremyP