禁用某些文件的自动引用计数

时间:2011-06-23 03:02:05

标签: objective-c ios5 automatic-ref-counting

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

编辑:

答案是将-fno-objc-arc添加到您不希望ARC的文件的编译器标志中。在Xcode 4中,您可以在目标下执行此操作 - >构建阶段 - >编译来源。

4 个答案:

答案 0 :(得分:77)

如何在 MULTIPLE 文件上禁用ARC并不是很直观,有一段时间我一个接一个地去做,直到找到了解决方法。

  1. 在Xcode中的目标/构建阶段/编译源中选择所需的文件(CMD +单击或按住Shift并单击)
  2. 按ENTER (双击将重置选择,因此不起作用)
  3. 输入 -fno-objc-arc
  4. 按Enter或完成

答案 1 :(得分:73)

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

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

对于是否可以将非ARC库/框架集成到ARC程序中,相同的文档更清楚:是的。它没有提到你是否可以在所有代码都是非ARC的程序中使用ARC库/框架,但鉴于上述所有内容,其含义似乎是肯定的。

答案 2 :(得分:35)

如果你想为某些文件禁用自动引用计数,那么按照步骤操作非常简单。你可以在目标中添加编译器标志 - >构建阶段 - >编译来源。

xcode

使用的标志是 -fno-objc-arc 写完后按Enter键。 您必须双击Compiler Flags下行的右列。 希望它有所帮助谢谢:)

答案 3 :(得分:2)

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

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