【问题标题】:iPhone SDK: Dealloc vs. Release?iPhone SDK:Dealloc 与 Release?
【发布时间】:2009-11-05 18:31:15
【问题描述】:

我想知道 release 和 dealloc 之间有什么区别?在阅读了内存管理规则(见下文)之后,我在想大部分时间我将使用释放。但是,我想知道如何处理属性。

@property(保留)....

我一直在使用 dealloc,但在阅读了这篇文章后我不确定它是否正确。

如果您使用名称以“alloc”或“new”开头或包含“copy”的方法(例如,alloc、newObject 或 mutableCopy)创建对象,或者向其发送保留消息。您有责任放弃使用 release 或 autorelease 拥有的对象的所有权。任何其他时间您收到物品时,都不得释放它。

【问题讨论】:

    标签: iphone


    【解决方案1】:

    除了super 之外,您绝不应该致电dealloc

    您将调用dealloc 的唯一时间是在自定义继承对象的dealloc 方法中,它将是[super dealloc]

    当一个对象的retain count降为零时,dealloc会自动为你调用,所以为了正确管理内存,你需要在适当的时候调用retainrelease

    如果您不清楚这一点,或者您想了解有关 Cocoa 中如何管理内存的详细信息,您应该阅读Memory Management Programing Guide

    【讨论】:

      【解决方案2】:

      你永远不会直接调用 dealloc。当对象的 retainCount 变为 0 时,系统会调用它。每次执行 retain 时,retainCount 都会增加 1 . 每次你执行release,它都会减少。这样,通过平衡您的 retainsreleases,您可以确保当 retainCount 为 0 时,dealloc 将被自动调用,并且你的对象被释放。

      正如 Ben S 所说,您调用 dealloc 的唯一时间和地点是在继承对象的 dealloc 方法中。

      【讨论】:

        【解决方案3】:

        使用@property(retain)@synthesize生成属性代码时,不需要对属性进行任何手动内存管理。其他答案是正确的,因为您不应该使用dealloc,除非您自己覆盖父类dealloc

        【讨论】:

          猜你喜欢
          • 2010-11-30
          • 1970-01-01
          • 2018-10-22
          • 1970-01-01
          • 2016-04-04
          • 1970-01-01
          • 2018-09-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多