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