【问题标题】:Recent Changes in Objective-C runtime/ Xcode 4.2 codeObjective-C 运行时/ Xcode 4.2 代码的最新变化
【发布时间】:2026-01-25 21:40:01
【问题描述】:

我刚开始学习 Obj-C,我有点困惑。我一直在 Lynda.com 上观看的视频是使用 Xcode 4 创建的,但是有很多不同之处,我很难相信它们都出现在 2 点版本中。例如:

在视频中你可以写:

@property NSString * myString

这会很好,但现在在 4.2 中它会引发错误,除非您编写如下内容:

@property (nonatomic, retain) NSString * myString

另外,默认情况下实现代码中不再有init或dealloc方法,NSAutoReleasePool的实现方式完全不同。什么给了?

【问题讨论】:

  • 请显示您看到的错误。以前的属性声明在我的 4.2 安装中运行良好。
  • 可能是编译器设置。我正在做一个基础项目,我没有改变任何东西

标签: objective-c xcode4 xcode4.2


【解决方案1】:

虽然我不能保证此列表是详尽无遗的,但您会在网上找到以下差异:

  • Objective-C 1.0 或 2.0
  • 旧的或现代的运行时
  • 手动或自动引用计数

我个人对主要区别的看法是:

  • Objective-C 2.0 带来了属性和合成访问器等功能
  • 现代运行时组织实例变量(非脆弱实例变量)的方式有所不同,但在日常开发工作中您可能不会注意到
  • 如果操作系统支持,现代运行时还允许 64 位应用程序
  • 自动引用计数可让您以遵循编码和命名约定的适度成本取消保留/释放代码

还有更多区别,但在我看来,这些是最重要的——我个人很少需要使用自动释放池,如果我理解正确,新语法不会改变功能。

【讨论】:

    【解决方案2】:

    如果您使用“自动引用计数”选项“打开”创建项目,则不会有任何 init 或 dealoc 方法。

    【讨论】:

      【解决方案3】:

      创建项目时
      检查使用自动引用计数

      【讨论】:

      • arc 是唯一的新事物还是我应该阅读更多内容?
      【解决方案4】:

      创建项目时,您可以选中“使用自动引用计数”选项。如果你确实检查了这个,那么就不会有任何 init 或 dealloc 方法,因为 Xcode 会自动进行引用计数。

      【讨论】:

      • 您仍然使用 ARC 编写 -initXXX 方法,适用于您之前编写的相同情况。 (你也可以编写 -dealloc 方法,但不太可能)