我应该在 dealloc 中释放实例变量和属性吗?

Posted

技术标签:

【中文标题】我应该在 dealloc 中释放实例变量和属性吗?【英文标题】:Should I release instance variables and properties in dealloc? 【发布时间】:2012-03-02 13:29:33 【问题描述】:

根据 Apple 在 View Controller Lifecycle 上的文档,我注意到有关 dealloc 方法的以下内容:

仅覆盖此方法以执行任何最后一分钟清理您的 视图控制器类。存储在实例变量中的对象和 属性自动释放;你不需要释放它们 明确的。

我一直被教导要对我在视图控制器的 dealloc 方法中拥有的实例变量和属性调用 release。

我知道的唯一例外是在使用 ARC 时,但它没有在本文档中提及 ARC。

这对吗?

【问题讨论】:

【参考方案1】:

由于您发布的指南最近已更新,我很确定它假定您正在使用 ARC(毕竟,如果可能的话,您应该这样做)。

您是对的,在 ARC 之前,您必须在 dealloc 方法中释放您的实例变量(您可以在 App-Delegate 的 dealloc 的旧 XCode 模板中看到这一点)。使用 ARC,这会自动处理(如本指南所述),因此除了特殊需要外,不再使用 dealloc 方法。

【讨论】:

想法很多,但文档不清楚。我正在使用在引入 ARC 之前构建的代码。【参考方案2】:

正如 JiaYow 所提到的,该指南已更新为 ARC。在这里您可以找到视图控制器的旧版指南:https://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/ViewControllerPGforiOSLegacy/BasicViewControllers/BasicViewControllers.html#//apple_ref/doc/uid/TP40011381-CH101-SW1

【讨论】:

以上是关于我应该在 dealloc 中释放实例变量和属性吗?的主要内容,如果未能解决你的问题,请参考以下文章

这个变量应该手动释放吗?

Object-C Dealloc

释放属性的简单模式

Swift UnsafeMutablePointer:我必须在释放之前调用 deinitialize 吗?

将实例 ID 打印到 NSLog?

我应该总是为失败的初始化方法释放自我吗?