7

我想我知道区别,但不知道如何正确解释。

dealloc 会立即完全删除该变量保留的内存。

release 将该变量内存的保留计数器递减 -1。如果它是1,那么它是0,所以它会在那个时刻与dealloc具有相同的效果。

是对的吗?还是有更好的简短解释?

4

2 回答 2

13

这是完全正确的。

但是在使用对象时您不会使用dealloc, 因为您不知道保留计数是多少。你也不在乎。你只是说你不再需要它,通过调用release. 一旦没有人这样做,对象就会调用dealloc自己。

于 2009-04-07T12:32:51.247 回答
7

一切都正确,但是您缺少的一个关键点是您永远不应该自己调用 dealloc。以下是 Apple 文档中有关 NSObject 的 dealloc 方法的一些信息:

(来自http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/nsobject_Class/Reference/Reference.html#//apple_ref/occ/instm/NSObject/dealloc

您永远不会直接发送 dealloc 消息。相反,对象的 dealloc 方法是通过释放 NSObject 协议方法间接调用的(如果释放消息导致接收者的保留计数变为 0)。有关使用这些方法的更多详细信息,请参阅 Cocoa 的内存管理编程指南。

子类必须实现它们自己的 dealloc 版本,以允许释放对象消耗的任何额外内存——例如为数据或对象实例变量动态分配的存储被释放对象所拥有。在执行特定于类的释放后,子类方法应该通过向 super 发送消息来合并超类版本的 dealloc:

于 2009-04-07T12:36:41.783 回答