我想我知道区别,但不知道如何正确解释。
dealloc 会立即完全删除该变量保留的内存。
release 将该变量内存的保留计数器递减 -1。如果它是1,那么它是0,所以它会在那个时刻与dealloc具有相同的效果。
是对的吗?还是有更好的简短解释?
这是完全正确的。
但是在使用对象时您不会使用dealloc
, 因为您不知道保留计数是多少。你也不在乎。你只是说你不再需要它,通过调用release
. 一旦没有人这样做,对象就会调用dealloc
自己。
一切都正确,但是您缺少的一个关键点是您永远不应该自己调用 dealloc。以下是 Apple 文档中有关 NSObject 的 dealloc 方法的一些信息:
您永远不会直接发送 dealloc 消息。相反,对象的 dealloc 方法是通过释放 NSObject 协议方法间接调用的(如果释放消息导致接收者的保留计数变为 0)。有关使用这些方法的更多详细信息,请参阅 Cocoa 的内存管理编程指南。
子类必须实现它们自己的 dealloc 版本,以允许释放对象消耗的任何额外内存——例如为数据或对象实例变量动态分配的存储被释放对象所拥有。在执行特定于类的释放后,子类方法应该通过向 super 发送消息来合并超类版本的 dealloc: