我已经下载了iOS 5 SDK,发现ARC是新的苹果编译器的一个很好的功能。然而目前为止,许多第三方框架都不支持ARC。我能否对我的新代码使用ARC,并保持当前的retain/release代码不变?由于一些框架(如JSONKit)无法通过转换器转换为ARC,因此ARC转换器在这里不起作用。
编辑:
解决方法是为不想使用ARC的文件添加 -fno-objc-arc
到编译器标志中。在Xcode 4中,您可以在目标-> 构建阶段-> 编译源代码下完成这项操作。
我已经下载了iOS 5 SDK,发现ARC是新的苹果编译器的一个很好的功能。然而目前为止,许多第三方框架都不支持ARC。我能否对我的新代码使用ARC,并保持当前的retain/release代码不变?由于一些框架(如JSONKit)无法通过转换器转换为ARC,因此ARC转换器在这里不起作用。
编辑:
解决方法是为不想使用ARC的文件添加 -fno-objc-arc
到编译器标志中。在Xcode 4中,您可以在目标-> 构建阶段-> 编译源代码下完成这项操作。
禁用多个文件的 ARC (自动引用计数),并不是很直观,我曾经一个个地禁用,直到我发现了如何批量操作。
公开的ARC文档虽然没有直接明确这一点,但似乎建议只要每个类都是全ARC或全手动管理,就可以将这些类集成到一个单一的程序中。
您只能在单个类中不能混合ARC和非ARC; 该文档指出,在ARC代码中禁止发送retain
、release
、autorelease
或retainCount
消息,任何方式都不行(包括使用@selector
的定时器和延迟执行)。因此,您不能在ARC类中使用非ARC(因为必要的消息被禁止),也不能在非ARC类中使用ARC(因为ARC添加了无效的语法元素)。
同一文档对于是否可以将非ARC库/框架集成到ARC程序中更加清晰:可以。它没有提到您是否可以在所有代码都是非ARC的程序中使用ARC库/框架,但鉴于以上所有内容,暗示是可以的。
#import
它们之外,不会查看头文件。编译器标志设置是针对每个模块文件(更准确地说,是“编译源”构建阶段中的每个文件)。编译器无法知道是否应该为任何其他文件使用ARC,除非继承了它开始使用的模块文件的选择。 - Peter Hosey如果您想禁用某些文件的自动引用计数,则非常简单,只需按照以下步骤操作。您可以在Targets -> Build Phases -> Compile Sources中添加编译器标志。
使用的标志是-fno-objc-arc,输入后按回车键!您需要双击“编译器标志”下的行右侧列。
希望能帮到您,谢谢 :)
-fobjc-arc
标志来在非 ARC 项目中对特定文件启用 ARC,方法与之前相同。 - lnafziger