我想我知道不同之处,但不知道如何正确解释。
dealloc完全立即删除该变量保留的内存。
release将该变量的内存的retain计数器递减-1。如果它是1,那么它是0,所以它会在那一刻产生与dealloc相同的效果。
是吗?还是有更好的简短解释?
答案 0 :(得分:13)
这是完全正确的。
但是在使用对象时不会使用dealloc
,因为您不知道保留计数是什么。你也不在乎。你只需要通过调用release
说你不再需要它了。一旦没有人,该对象将自己调用dealloc
。
答案 1 :(得分:7)
一切都正确,但你遗漏的一个关键点是你永远不应该自己打电话给dealloc。以下是Apple关于NSObject dealloc方法的文档中的一些信息:
您永远不会发送dealloc消息 直。相反,一个对象的dealloc 方法通过间接调用 发布NSObject协议方法 (如果发布消息导致 接收者的保留计数变为0)。 请参阅内存管理编程 可可指南了解更多详情 使用这些方法。
子类必须实现自己的 dealloc的版本允许 释放任何额外的内存 由对象消耗 - 例如 动态分配数据存储 或拥有的对象实例变量 解除分配的对象。后 执行特定于类的 deallocation,子类方法 应该包含超类版本 dealloc通过消息到超级: