我已经下载了iOS 5 SDK,并发现ARC是新Apple编译器的一项强大功能。目前,许多第三方框架不支持ARC。我可以使用ARC作为新代码并保持当前的保留/发布代码不变吗?ARC转换器在这里不起作用,因为某些框架(例如JSONKit)无法使用该转换器转换为ARC。
编辑:
答案是为-fno-objc-arc
不需要ARC的文件添加到编译器标志。在Xcode 4中,您可以在目标->构建阶段->编译源代码下执行此操作。
.m
文件中。不是.h
文件。
我已经下载了iOS 5 SDK,并发现ARC是新Apple编译器的一项强大功能。目前,许多第三方框架不支持ARC。我可以使用ARC作为新代码并保持当前的保留/发布代码不变吗?ARC转换器在这里不起作用,因为某些框架(例如JSONKit)无法使用该转换器转换为ARC。
编辑:
答案是为-fno-objc-arc
不需要ARC的文件添加到编译器标志。在Xcode 4中,您可以在目标->构建阶段->编译源代码下执行此操作。
.m
文件中。不是.h
文件。
Answers:
公开的ARC文档虽然在这一点上尚不明确,但似乎建议,只要每个类都是全部ARC或所有手动管理的类,就可以将这些类集成到单个程序中。
您只能将ARC和非ARC混为一类。的文件说,发送retain
,release
,autorelease
,或retainCount
通过任何手段(包括计时器和延迟进行,其使用消息@selector
)在ARC代码禁止。因此,您不能在ARC类中执行非ARC(因为禁止了必要的消息),并且您不能在非ARC类中执行ARC(因为ARC添加了没有ARC时无效的语法元素)。
关于是否可以将非ARC库/框架集成到ARC程序中,同一文档更加清晰:是。它没有提及您是否可以在所有代码都不为ARC的程序中使用ARC库/框架,但是鉴于上述所有情况,其含义似乎是肯定的。
#import
从模块文件中读取它们。编译器标志设置适用于每个模块文件(更准确地说,是“编译源”构建阶段中的每个文件)。编译器没有办法知道是否应将ARC用于其他任何文件,除非继承了为其最初使用的模块文件指定的选择。
如何禁用多个文件上的ARC并不是很直观,一段时间以来,我一直一步一步地进行操作,直到弄清楚如何做。
如果要禁用某些文件的自动引用计数,则只需执行以下步骤即可。在目标->构建阶段->编译源中添加编译器标志。
所使用的标志是-fno-objc-arc,写完后按Enter。您必须双击“编译器标志”下该行的右列。希望对您有所帮助:)
-fobjc-arc
。
通过为这些文件添加-fno-objc-arc编译器标志,可以禁用单个文件的ARC。