我使用 Xcode 项目向导创建了一个支持 ARC 的项目。与没有 ARC 支持的程序相比,我没有注意到任何差异。是否有任何提示可以告诉我我的程序是否支持 ARC?
我正在使用 XCode 4.2.1 Build 4D502
我使用 Xcode 项目向导创建了一个支持 ARC 的项目。与没有 ARC 支持的程序相比,我没有注意到任何差异。是否有任何提示可以告诉我我的程序是否支持 ARC?
我正在使用 XCode 4.2.1 Build 4D502
您可以使用__has_feature
,也许记录项目是否在控制台中有 ARC,如下所示:
#if __has_feature(objc_arc)
// ARC is On
NSLog(@"ARC on");
#else
// ARC is Off
NSLog(@"ARC off");
#endif
或者,不要只记录 ARC 是否打开,如果 ARC 开启(或关闭),请尝试让编译器引发错误,如下所示:
#if ! __has_feature(objc_arc)
#error This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC).
#endif
如果您只是想知道您的项目是否有 ARC,我建议您使用 jpalten 的答案。如果您希望您的代码仅使用 ARC 构建,我建议使用 qegal。
但是,如果您想知道该设置在 Xcode 中的位置:
OBJC_ARC
。这将在构建设置中留下一行显示,Objective-C Automatic Reference Counting或CLANG_ENABLE_OBJC_ARC(取决于您是显示设置描述还是名称)。如果它设置为 YES,则您已打开 ARC。
这是您的目标选择是否使用 ARC。请注意,每个文件都可以使用不同的设置进行编译。这不是你问的,但既然我们已经有了三个答案,我想我会阻止可能的第四个。:)
要查看哪些文件会覆盖 ARC 设置:
在这里,您可以看到每个文件的编译器标志。具有该设置是否使用 ARC 的文件将包括-fno-objc-arc或-fobjc-arc,用于分别指定 MRR 或 ARC。
或者只测试一次,在你的代码中添加这个:
NSString* dummy = [[[NSString alloc] init] autorelease];
如果您使用 ARC,这应该会引发错误。如果是这样,则启用了 ARC,一切都很好,您可以再次将其删除。
在构建阶段为所有 .m 文件添加“-fno-objc-arc”编译器标志