183

我已经下载了 iOS 5 SDK,发现 ARC 是 Apple 新编译器的一大特色。目前,许多第三方框架不支持 ARC。我可以将 ARC 用于我的新代码并保持当前的保留/发布代码不变吗?ARC转换器在这里不起作用,因为某些框架,例如JSONKit,无法使用转换器将其转换为ARC。

编辑:

答案是为-fno-objc-arc不需要 ARC 的文件添加编译器标志。在 Xcode 4 中,您可以在 target -> Build Phases -> Compile Sources 下执行此操作。

4

4 回答 4

78

如何在MULTIPLE文件上禁用 ARC 不是很直观,有一段时间我一个一个地做,直到弄清楚如何做到这一点。

  1. 在 Xcode 中的 Target/Build Phases/Compile Sources 中选择所需的文件(CMD+单击或 Shift+单击)
  2. PRESS ENTER(双击将重置选择,所以它不起作用)
  3. 类型-fno-objc-arc
  4. 按 Enter 或完成
于 2012-04-25T11:35:49.713 回答
73

公开的 ARC 文档虽然没有直接明确这一点,但似乎暗示只要每个类都是 ARC 或都是手动管理的,这些类就可以集成到一个程序中。

您不能在一个班级中混合使用 ARC 和非 ARC;该文件说,在 ARC 代码中禁止以任何方式(包括使用 的计时器和延迟执行)发送retainreleaseautorelease或消息。因此,您不能在 ARC 类中执行非 ARC(因为必要的消息被禁止),并且您不能在非 ARC 类中执行 ARC(因为 ARC 添加了没有 ARC 无效的语法元素)。retainCount@selector

关于是否可以将非 ARC 库/框架集成到 ARC 程序中,同一份文档更加清晰:是的。它没有提到您是否可以在所有代码都是非 ARC 的程序中使用 ARC 库/框架,但鉴于上述所有情况,暗示似乎是肯定的。

于 2011-06-23T05:11:11.597 回答
35

如果您想为某些文件禁用自动引用计数,那么只需按照步骤操作就可以了。您在 Targets -> Build Phases -> Compile Sources 中添加编译器标志。

代码

使用的标志是-fno-objc-arc写完后按回车!您必须双击编译器标志下行的右列。希望对您有所帮助谢谢:)

于 2012-04-21T03:02:00.647 回答
2

可以通过为这些文件添加 -fno-objc-arc 编译器标志来禁用单个文件的 ARC。

如何为项目中的单个文件禁用 ARC?

于 2013-03-22T03:50:24.660 回答