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

1373

我在我的项目中成功地使用了ARC。然而,在一些文件(例如单元测试和模拟对象)中,ARC的规则现在有点更加脆弱。我记得听说有一种方法可以按文件禁用ARC,但是我一直无法找到这个选项。

这个可能吗?我如何按文件禁用ARC?


http://stackoverflow.com/questions/30274209/why-maintaining-retain-count-is-not-required-in-arc-enabled-project?__=2075832026 - Vizllx
18个回答

2183

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

您可以在"Targets->Build Phases->Compile Sources"中添加编译器标志。您需要双击"Compiler Flags"下面的行的右列。您还可以通过按住cmd键选择文件,然后按enter键打开标志编辑框将其添加到多个文件中。(请注意,编辑多个文件将覆盖它可能已经具有的任何标志。)

我创建了一个示例项目,其中包含一个示例:https://github.com/jaminguy/NoArc

xcode

有关更多信息,请参见此答案: 禁用某些文件的自动引用计数


59
所以,添加这个标志的位置并不是很直观。但是,在Xcode 4中,在构建阶段和编译源文件中,实际上有两列。一个是文件名,另一个是该文件的编译标志。这就是您输入此特定编译器标志的位置。 - casademora
3
你可以指定一个目录,即指定目录中的所有文件吗?对于一个群组呢? - ma11hew28
4
构建设置中只能选择一个单一文件,无法选择目录。 :( - casademora
14
@casademora,你的这篇信息无论如何都得不到足够的赞。谢谢你。 - theTRON
26
你可以一次选择多个文件,但不要双击而是按回车键。然后只需添加-fno-objc-arc,它将添加到所有选定的文件中。编辑刚刚看到这个答案下面的回复:( - Philipp Kyeck
显示剩余8条评论

464

禁用 ARC(自动引用计数)在多个文件中:

  1. 在 Xcode 中的 Target/Build Phases/Compile Sources 选择所需文件
  2. 按下回车键
  3. 输入-fno-objc-arc
  4. 按下回车键完成

;)

图片描述


2
谢谢!我一直在寻找这个功能。当选择多行时,双击不起作用,但按回车键可以。好奇怪。 - bobmoff
4
哇哦,我愿意花费我全部的“功德值”再次点赞这个帖子。谢谢分享! - jemmons
这似乎在Xcode 4.3.3上不再起作用了。双击或按回车键选定文件不会弹出对话框以输入-fno-ojbc-arc标志,有人有解决方法吗? - tom
我之前用的是4.3.3版本,现在换成了4.4 DP7版本,但它仍然可以正常工作。你可以尝试重启Xcode、重启电脑或修复权限来解决问题。 - Tibidabo

45
对于Xcode 4.3而言,更简单的方式可能是:编辑/重构/转换为Objective-C ARC,然后取消勾选不希望被转换的文件。我发现这种方式与使用上面的编译器标志相同。

38

非ARC文件转换为ARC项目标志:-fno-objc-arc

ARC文件转换为非ARC项目标志:-fobjc-arc

使单个文件成为非ARC文件的方法非常简单:

请按照以下步骤操作:

在Xcode的目标/构建阶段/编译源代码中选择所需文件

  1. 选择需要转换为非ARC文件的.m文件

  2. 按ENTER键,然后输入-fno-objc-arc

注意:请保留原有的HTML标签。


36
注意:如果您想为多个文件禁用ARC,则需要执行以下操作:
  1. 打开“Build Phases”->“Compile Sources”
  2. 选择带有“左键鼠标”+“Cmd”(对于单独的文件)或+“Shift”(对于分组文件-选择第一个和最后一个)的文件
  3. 按“enter”
  4. 粘贴-fno-objc-arc
  5. 再次按“enter”
  6. 获利!

22
只需在“构建阶段”的“编译源代码”中使用-fno-objc-arc标志。

14
  1. 选择Xcode项目
  2. 转到目标(Targets)
  3. 选择“Build phases”选项卡
  4. 在“Build phases”选项卡中选择“Compile Sources”
  5. 选择您不想禁用ARC的文件,并添加“-fno-objc-arc”

为特定文件禁用ARC


14

在 Xcode 中,可以针对特定文件禁用 ARC(自动引用计数)。

选择目标 -> 构建阶段 -> 编译源代码 -> 选择文件(双击)-> 将 "-fno-objc-arc" 添加到弹出窗口。

我在使用 "Reachibility" 文件时遇到了这种情况。

如下图所示:

enter image description here


12

在这个视频中讲解了四个强制步骤。

    //1. Select desired files
    //2. Target/Build Phases/Compile Sources
    //3. Type -fno-objc-arc
    //4. Done

12

在构建阶段的每个文件中使用-fno-objc-arc


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,