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

How can I disable ARC for a single file in a project?

提问人:casademora 提问时间:7/11/2011 最后编辑:Nikolai Ruhecasademora 更新时间:5/7/2018 访问量:340614

问:

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

这可能吗?如何基于每个文件禁用 ARC?

objective-c xcode 自动引用计数 手动保留释放

评论

0赞 Vizllx 2/22/2016
stackoverflow.com/questions/30274209/......

答:

2183赞 jaminguy 7/12/2011 #1

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

您可以在“目标”-“生成阶段”>“编译源”>“生成阶段”中添加编译器标志。您必须双击“编译器标志”下行的右列。您还可以通过按住 cmd 按钮选择文件,然后按 Enter 键调出标志编辑框来将其添加到多个文件中。(请注意,编辑多个文件将覆盖它可能已经拥有的任何标志。

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

xcode

有关详细信息,请参阅此答案:禁用某些文件的自动引用计数

评论

59赞 casademora 7/27/2011
因此,添加此标志的位置不太直观。但是,在 Xcode 4 中,在构建阶段和编译源代码中,实际上有两列。一个用于文件名,另一个用于该文件的编译标志。这是输入此特定编译器标志的位置。
3赞 ma11hew28 8/9/2011
您可以指定一个目录,即一个目录中的所有文件吗?对于一个团体呢?
4赞 casademora 8/9/2011
没有目录。生成设置中一次只能打开一个文件 :(
14赞 theTRON 10/28/2011
@casademora你无法为这条信息获得足够的赞成票。谢谢。
26赞 Philipp Kyeck 4/7/2012
@casademora您可以一次选择多个文件 - 但不要双击,而是点击 RETURN。然后只需添加,它就会被添加到所有选定的文件中。编辑刚刚看到了这个下面的答案:(-fno-objc-arc
464赞 Tibidabo 4/1/2012 #2

多个文件上禁用 ARC

  1. 在 Xcode 中的 Target/Build Phases/Compile Sources 中选择所需的文件
  2. 按 ENTER 键
  3. 键入 -fno-objc-arc
  4. EnterDone

;)

enter image description here

评论

2赞 bobmoff 4/12/2012
谢谢! 寻找这个功能很久了。选择多行时,双击不起作用,但按 Enter 键可以。太奇怪了。
4赞 jemmons 5/4/2012
哦,哇。我会花我所有的业力来再次投票。感谢分享!
0赞 tom 7/26/2012
这似乎不再适用于 Xcode 4.3.3。双击或按所选文件上的Enter键不会弹出用于放置-fno-ojbc-arc标志的对话框,有人对此有解决方法吗?
0赞 Tibidabo 7/29/2012
我有 4.3.3 和现在的 4.4 DP7,它仍然工作正常。尝试重新启动 Xcode、重新启动计算机并修复权限。
45赞 Jingjie Zhan 7/19/2012 #3

对于 Xcode 4.3,更简单的方法可能是:编辑/重构/转换为 objective-C ARC,然后勾选您不想转换的文件。我发现这种方式与使用上面的编译器标志相同。

22赞 Rahul Gupta 11/28/2012 #4

只需在-fno-objc-arcBuild Phases>Compile Sources

36赞 digipeople 3/7/2013 #5

注意:如果要对许多文件禁用ARC,则必须:

  1. 打开 “Build phases” -> “Compile sources”
  2. 选择带有“left_mouse”+“cmd”(对于单独的文件)或+“shift”(对于分组文件-选择第一个和最后一个)的文件
  3. 按“Enter”
  4. -fno-objc-arc
  5. 再次按“Enter”
  6. 利润!
38赞 Dipak Narigara 7/5/2013 #6

这是使单个文件无弧形的非常简单的方法。

请按照以下步骤操作:

在单个文件上禁用 ARC:

  1. 在 Xcode 中的 Target/Build Phases/Compile Sources 中选择所需的文件

  2. 选择您想要的 .m 文件,使其成为非 ARC 按 ENTER 键 键入 -fno-objc-arc

非 ARC 文件到 ARC 项目标志:-fno-objc-arc

ARC 文件到非 ARC 项目标志:-fobjc-arc

12赞 Manish Jain 9/25/2013 #7

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

6赞 Manoj Chandel 10/10/2013 #8

添加标志“-fno-objc-arc”。

简单的步骤如下: App>Targets>Build Phases>编译源代码>在类“-fno-objc-arc”后添加标志

12赞 user2554822 10/22/2013 #9

视频中解释的四个强制性步骤

    //1. Select desired files
    //2. Target/Build Phases/Compile Sources
    //3. Type -fno-objc-arc
    //4. Done
14赞 user2538944 1/20/2014 #10
  1. 选择 Xcode 项目
  2. 转到目标
  3. 选择“生成阶段”部分
  4. 在“生成阶段”部分中,选择编译源。
  5. 选择您不想禁用 ARC 的文件并添加 -fno-objc-arc

Disable ARC for a particular file

14赞 Jayprakash Dubey 3/20/2014 #11

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

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

我在使用“可访问性”文件时遇到了这种情况。

如下图所示:

enter image description here

2赞 C_compnay 9/18/2014 #12

只需在不希望应用 ARC 的文件前面的 Build Phases>Compile Sources 中使用 -fno-objc-arc 标志即可。

-1赞 adijazz91 2/24/2015 #13

转到应用程序 -> 然后转到目标 -> 构建阶段 -> 编译源代码

现在,选择要禁用ARC的文件

粘贴此代码段“-fno-objc-arc” 粘贴后按 ENTER

在要禁用 ARC 的每个文件中。

评论

5赞 vikingosegundo 2/24/2015
您的回答不会为这个老问题提供任何补充。
-2赞 annu 3/9/2015 #14

以下步骤启用禁用 ARC

选择 Xcode 项目 转到目标 选择“生成阶段”部分 在“生成阶段”部分中,选择编译源。 选择您不想禁用 ARC 的文件并添加 -fno-objc-arc

评论

1赞 jomafer 5/14/2015
您的回答不会为这个老问题提供任何补充。
0赞 annu 5/14/2015
什么补充需要。如果您知道比提供我们更好。
0赞 jomafer 5/14/2015
我没有投反对票。只是这个问题是在 Jul 11 '11 at 5:21 被问到的。有太多的答案与相同的答案没有添加任何有用的信息......我怀疑有人因为这个原因对你投了反对票......
0赞 annu 5/14/2015
你能给我简单介绍一下吗?
8赞 greenland 10/19/2015 #15

如果您使用的是 Unity,则无需在 Xcode 中更改此设置,您可以在 Unity 中为特定文件的元数据应用编译标志。只需在“项目”面板中选择它们,然后从“检查器”面板中应用即可。如果您计划使用 Cloud Build,这是必不可少的。enter image description here

7赞 Vin 12/30/2015 #16

我认为所有其他答案都在解释如何禁用 MRC(手动引用计数)和启用 ARC(自动引用计数)。 要使用 MRC(手动引用计数),即在多个文件上禁用 ARC(自动引用计数):

  1. 在 Xcode 中的 Target/Build Phases/Compile Sources 中选择所需的文件
  2. 按 ENTER 键
  3. 键入 -fobjc-arc
  4. 按 Enter 或 Done 键
9赞 Tunvir Rahman Tusher 9/2/2016 #17

请按照屏幕截图并输入 -fno-objc-arc

enter image description here

-1赞 Mnsd 5/7/2018 #18
  1. 选择项目 -> 目标 -> 生成阶段 -> 编译器源代码
  2. 选择文件 -> 编译器标志
  3. 添加 -fno-objc-arc