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 模板中消失了的主要内容,如果未能解决你的问题,请参考以下文章
Viewcontroller Dealloc 方法永远不会被调用
没有在 UIViewController 上调用 Deinit,但 Dealloc 是