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