什么能最好地解释[myVar dealloc]和[myVar release]之间的区别?

时间:2009-04-07 12:25:04

标签: iphone release dealloc

我想我知道不同之处,但不知道如何正确解释。

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

release将该变量的内存的retain计数器递减-1。如果它是1,那么它是0,所以它会在那一刻产生与dealloc相同的效果。

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

2 个答案:

答案 0 :(得分:13)

这是完全正确的。

但是在使用对象时不会使用dealloc,因为您不知道保留计数是什么。你也不在乎。你只需要通过调用release说你不再需要它了。一旦没有人,该对象将自己调用dealloc

答案 1 :(得分: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)。   请参阅内存管理编程   可可指南了解更多详情   使用这些方法。

     

子类必须实现自己的   dealloc的版本允许   释放任何额外的内存   由对象消耗 - 例如   动态分配数据存储   或拥有的对象实例变量   解除分配的对象。后   执行特定于类的   deallocation,子类方法   应该包含超类版本   dealloc通过消息到超级: