2011-06-23 28 views
182

我已经下载了iOS 5 SDK,发现ARC是新Apple编译器的一大特性。目前,许多第三方框架不支持ARC。我是否可以将ARC用于新代码并保持当前的保留/发布代码不变? ARC转换器在此不起作用,因为某些框架(如JSONKit)无法通过转换器转换为ARC。为某些文件禁用自动引用计数

编辑:

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

+2

为了澄清,你只需将其添加到'.m'文件。不是'.h'文件。 – ma11hew28

+10

[ARC在LLVM网站上公开记录](http://clang.llvm.org/docs/AutomaticReferenceCounting.html) –

+0

我发现了这个对话: https://github.com/gowalla/AFNetworking/issues/ 36也许它可以帮助某人如何在iOS5 ARC支持的项目中集成JSONKit ;-)但是我现在还没有尝试过...... – 2011-10-17 06:48:16

回答

73

The public ARC docs虽然没有直接清楚这一点,但似乎表明,只要每个类都是ARC或全部手动管理,这些类可以集成到一个程序中。

你只能在一个类中混合使用ARC和非ARC;该文件说,通过任何方式(包括定时器和延迟执行,使用@selector)在ARC代码中禁止发送retainreleaseautoreleaseretainCount消息。所以你不能在ARC类中做非ARC(因为必须的消息被禁止),你不能在非ARC类中做ARC(因为ARC添加了无ARC的无效语法元素)。

关于是否可以将非ARC库/框架集成到ARC程序中,相同的文档更清晰一点:是的。它没有提到你是否可以在所有代码都是非ARC的程序中使用ARC库/框架,但考虑到上述所有情况,其含义似乎是肯定的。

+0

谢谢!我已经想出了如何为现有的非ARC类禁用ARC。 – nonamelive

+0

你能跟我们分享你在做什么吗? –

+1

@David H:如果你打算向提问者说明这一点,你应该注意提问者将他们的解决方案编辑成问题。 –

35

如果您想要禁用某些文件的自动引用计数,那么只需执行以下步骤即可轻松完成自动引用计数。您可以在目标 - >构建阶段 - >编译源中添加编译器标志。

xcode

使用的标志是-fno-objc弧写作之后按回车! 您必须双击Compiler Flags下的右列。 希望它能帮助谢谢:)

+14

您可以使用相同的方法通过使用标志'-fobjc-arc'在非ARC项目的特定文件上**启用** ARC。 – lnafziger

+0

无法在HEADER文件中禁用ARC编译。 Clang不会根据其实现/方法文件的编译来编译接口/头文件。因此,在混合编译中,头文件必须兼容ARC和非ARC。我认为这是编译器中的一个错误。 – carmin

76

这是不是很直观如何在多禁用ARC文件,有一阵子我做一个接一个,直到想出如何做到这一点。

  1. 选择所需文件在Target /构建阶段/编译源代码在Xcode(CMD +单击或Shift +单击)
  2. PRESS ENTER(双击将重置选择,所以它简化版,工作)
  3. 类型-fno-objc弧
  4. 按Enter键或完成
+1

这不是真正的答案,而是一个血腥的小提示!投票+1 –

+0

你是对的,这不是,但我总是只是搜索开关,这是答案之一。我认为现在大多数人已经知道答案,但不是这个“提示” – Tibidabo

0

要为个人类,你需要去点击Xcode中的项目后,建设阶段和扩大编译源代码部分禁用ARC。

在右侧,您会看到为特定类添加编译器标志的选项。为该类设置-fno-objc-arc将禁用ARC。

来源: Disable Automatic Reference Counting with -fno-objc-arc