我如何知道我的程序是否启用了ARC?

我使用Xcode项目向导创build了一个支持ARC的项目。 与没有ARC支持的程序相比,我没有注意到任何差异。 有什么提示可以告诉我,如果我的程序支持ARC?

我正在使用XCode 4.2.1 Build 4D502

您可以使用__has_feature ,也许logging项目是否在控制台中有ARC:

 #if __has_feature(objc_arc) // ARC is On NSLog(@"ARC on"); #else // ARC is Off NSLog(@"ARC off"); #endif 

或者,不要只loggingARC是否打开,如果ARC打开(或closures),请尝试使编译器产生错误,如下所示:

 #if ! __has_feature(objc_arc) #error This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC). #endif 

如果你只是想知道你的项目是否有ARC,我build议使用jpalten的答案。 如果你想要你的代码只用ARC打造,我build议qegal的。

但是,如果你想知道Xcode的设置在哪里:

  1. 在导航器中select您的项目。 这将打开项目编辑器。
  2. 在项目编辑器中,select您的目标。
  3. 在项目编辑器中,单击生成设置(如果它尚未被选中)。
  4. 在项目编辑器中,单击search框并键入OBJC_ARC

这会在Build Settings中留下一行显示, Objective-C自动引用计数CLANG_ENABLE_OBJC_ARC (取决于您是否显示设置描述或名称)。 如果它设置为YES,那么您的ARC已经打开。

这是你的目标selectARC是否被使用。 请注意,每个文件都可以使用不同的设置进行编译。 这不是你问的,但是因为我们已经有了三个答案,所以我想我可能会排第四。 🙂

要查看哪些文件覆盖ARC设置:

  1. 在导航器中select您的项目。 这将打开项目编辑器。
  2. 在项目编辑器中,select您的目标。
  3. 在项目编辑器中,单击“ 构build阶段” (而不是“构build设置”)。
  4. 展开编译源构build阶段。

在这里,你可以看到每个文件的编译器标志。 设置是否使用ARC的文件将包含-fno-objc-arc-fobjc-arc ,分别用于指定MRR或ARC。

或者只testing一次,在你的代码中join:

 NSString* dummy = [[[NSString alloc] init] autorelease]; 

如果您使用ARC,这应该会引发错误。 如果是这样,ARC已启用,一切正常,您可以再次删除它。

在构build阶段为所有.m文件添加“-fno-objc-arc”编译器标志