【问题标题】:What explains best the difference between [myVar dealloc] and [myVar release]?什么最能解释 [myVar dealloc] 和 [myVar release] 之​​间的区别?
【发布时间】:2010-10-18 01:08:26
【问题描述】:

我想我知道其中的区别,但不知道如何正确解释。

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

release 将该变量内存的保留计数器递减 -1。如果是1,那么它就是0,所以那一刻的效果和dealloc是一样的。

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

【问题讨论】:

    标签: iphone release dealloc


    【解决方案1】:

    所有正确,但您缺少的一个关键点是您永远不应该自己调用 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 以允许 释放任何额外的内存 被对象消耗——例如 为数据动态分配的存储空间 或拥有的对象实例变量 释放的对象。后 执行特定类别 释放,子类方法 应该包含超类版本 通过消息给super的dealloc:

    【讨论】:

    • 谢谢。我想我现在有点困惑......所以在子类的 dealloc 方法中,我必须释放我的实例变量,对吗?即 - (void)dealloc { [yellowViewController dealloc]; [blueViewController 解除分配]; [超级释放]; }
    • 明确一点,除了 super 之外,永远不要对任何东西调用 dealloc。 Thanks 的 dealloc 方法的正确实现是:-(void)dealloc { [yellowViewController release]; [blueViewController 发布]; [超级释放]; }
    • 我看到你正在阅读开始 iPhone 3 开发 - 探索 SDK(我也是,我认出了黄色/蓝色视图控制器项目)。
    【解决方案2】:

    完全正确。

    但是在使用对象时,您不会使用dealloc,因为您不知道保留计数是多少。你也不在乎。你只是说你不再需要它了,打电话给release。一旦没有人这样做,对象就会自己调用dealloc

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多