19

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

我正在使用 XCode 4.2.1 Build 4D502

4

4 回答 4

30

您可以使用__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
于 2012-07-08T03:56:07.580 回答
21

如果您只是想知道您的项目是否有 ARC,我建议您使用 jpalten 的答案。如果您希望您的代码仅使用 ARC 构建,我建议使用 qegal。

但是,如果您想知道该设置在 Xcode 中的位置:

  1. 在导航器中选择您的项目。这将打开项目编辑器。
  2. 在项目编辑器中,选择您的目标。
  3. 在项目编辑器中,单击构建设置(如果尚未选择)。
  4. 在项目编辑器中,单击搜索框并输入OBJC_ARC

这将在构建设置中留下一行显示,Objective-C Automatic Reference CountingCLANG_ENABLE_OBJC_ARC(取决于您是显示设置描述还是名称)。如果它设置为 YES,则您已打开 ARC。

这是您的目标选择是否使用 ARC。请注意,每个文件都可以使用不同的设置进行编译。这不是你问的,但既然我们已经有了三个答案,我想我会阻止可能的第四个。:)

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

  1. 在导航器中选择您的项目。这将打开项目编辑器。
  2. 在项目编辑器中,选择您的目标。
  3. 在项目编辑器中,单击Build Phases(不是 Build Settings)。
  4. 展开编译源构建阶段。

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

于 2012-07-08T05:05:07.320 回答
5

或者只测试一次,在你的代码中添加这个:

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

如果您使用 ARC,这应该会引发错误。如果是这样,则启用了 ARC,一切都很好,您可以再次将其删除。

于 2012-07-08T04:50:33.170 回答
1

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

于 2016-09-23T13:17:07.527 回答