【问题标题】:Objective C - [super dealloc] old? [duplicate]Objective C - [super dealloc] 旧的? [复制]
【发布时间】:2013-08-18 01:42:53
【问题描述】:

我有一个关于目标 c 的问题。我买了一本关于目标 c 的书。我是 Objective c 的新手,这本书包括许多关于内存管理的教程。我有 mac 版本 10.7.5。所以在关于 dealloc 的教程中,xcode 说我“ARC 禁止显式发送‘dealloc’的消息”。所以我在许多论坛中搜索这个错误。在这些论坛上,很多人说[super dealloc]继承自NSObject是旧的,新版本的系统会自动进行内存管理。这本书于 2011 年出版。

希望大家理解我。

提前谢谢你。

【问题讨论】:

  • ARC 于 2011 年年中推出。你的书可能早于 ARC。在任何情况下,编译器错误都是正确的——你不需要(即不能)在你的-dealloc 实现中调用[super dealloc]

标签: ios objective-c macos


【解决方案1】:

iOS 有一个新的(ish)系统,称为 ARC,它会自动向您的对象发送 release/retain/dealloc 等消息。你可以阅读更多关于它的信息here

回答您的问题时要注意的重要一点是 ARC 是可选。你可以使用它,但你不必这样做。 (当创建一个新的 XCode 项目时,你要么勾选“启用自动引用计数”按钮,要么不勾选。)

所以,回答您的问题:如果您在项目中使用 ARC,是的,dealloc 不再需要。如果您不使用 ARC,您仍然需要管理自己的内存。这取决于您如何设置项目。

【讨论】:

  • 推荐使用ARC吗?我应该将它用于我未来的项目吗?
  • @AlexStein 如果您正在关注一本没有使用它的书,如果您禁用它,您可能会更轻松。了解手动内存管理规则绝对有用,因为通过这种理解可以有效地排除 ARC 故障,因此暂时禁用它可能会为您提供很好的服务。
  • -dealloc 不是“无效的”。您根本不需要在那里释放/取消 ivars。由于在许多情况下这是 -dealloc 的唯一用途,因此您可以省略它。
猜你喜欢
  • 1970-01-01
  • 2011-10-18
  • 2014-10-12
  • 1970-01-01
  • 2010-10-08
  • 1970-01-01
  • 2011-11-09
  • 2012-08-08
  • 1970-01-01
相关资源
最近更新 更多