Dealloc 方法从 XCode 4.1 UIViewController 模板中消失了

Posted

技术标签:

【中文标题】Dealloc 方法从 XCode 4.1 UIViewController 模板中消失了【英文标题】:Dealloc method disappeared from XCode 4.1 UIViewController template 【发布时间】:2011-08-15 15:38:23 【问题描述】:

我在开始开发 ios 应用程序时一直使用 XCode 3.2.4,但现在我转向使用 iOS 4.3 SDK 的 XCode 4.1。我注意到,当我像在 XCode 3 中一样从 XCode 模板创建 UIViewController 类时,现在不会自动添加 dealloc 方法。 通过 Internet 搜索,我发现如果我使用 ARC(自动引用计数)创建项目,可能会发生这种情况,但据我所知,此功能仅在 XCode 4.2 中实现。

我应该手动添加 dealloc 方法吗?

【问题讨论】:

【参考方案1】:

你可以继续添加dealloc。如果确实启用了 ARC,您会收到编译器的抱怨。

即使在使用 ARC 时,如果您需要做一些除了释放对象之外的事情(例如,取消注册观察者),有时仍然需要使用 dealloc。

【讨论】:

当我添加 dealloc 方法时,编译器没有抱怨。但我想知道,为什么自动 dealloc 方法消失了。 那么这听起来像是 Xcode 中的一个错误。也许您想向 Apple 提交报告?【参考方案2】:

当不使用 ARC 时,是的...像往常一样使用 dealloc 方法。

如果启用了 ARC,则在显式使用 dealloc 时应该会收到警告。 还要检查您的项目的构建设置,以获得额外的安全性。您可以在 Xcode 4.1 中使用使用 Xcode 4.2 创建的项目。

在这种情况下,ARC 设置将位于底部,而不是通常的位置,因为它不应该被 Xcode 4.1 识别。

【讨论】:

您将收到有关release 的警告。 dealloc 在某些情况下仍然允许使用。 在 dealloc 中,您通常需要调用 [ super dealloc ]。这也会发出错误。 事实上,我查看了我的项目的构建设置,并没有关于 XCode 版本的信息。但是,我在问题中提到的情况是在我从头开始在 XCode 4.1 中创建项目时出现的。 @macmade,在使用 ARC 时,您不需要(实际上不应该)在您的 -(void)dealloc 方法中添加 [super dealloc] 阅读“使用 ARC 发行说明编程”中的“ARC 实施新规则”部分了解更多详细信息。

以上是关于Dealloc 方法从 XCode 4.1 UIViewController 模板中消失了的主要内容,如果未能解决你的问题,请参考以下文章

xcode 4.1 中的释放函数

Viewcontroller Dealloc 方法永远不会被调用

dealloc方法

没有在 UIViewController 上调用 Deinit,但 Dealloc 是

如何从 Mac App Store 指定 Xcode 4.1 的安装位置?

是否可以从 XCode 4.1 或 4.0.2 构建到 iOS 5 设备?