我怎么知道我的程序是否启用了ARC?

时间:2012-07-08 03:52:40

标签: objective-c ios xcode automatic-ref-counting

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

我正在使用XCode 4.2.1 Build 4D502

4 个答案:

答案 0 :(得分:26)

您可以使用__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

答案 1 :(得分:19)

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

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

  1. 在导航器中选择您的项目。这将打开项目编辑器。
  2. 在项目编辑器中,选择目标。
  3. 在项目编辑器中,单击“构建设置”(如果尚未选中)。
  4. 在项目编辑器中,单击搜索框并键入OBJC_ARC
  5. 这将在Build Settings中显示一行, Objective-C自动引用计数 CLANG_ENABLE_OBJC_ARC (取决于您是否显示设置描述或名称) 。如果设置为YES,则表示已启用ARC。

    这是您选择是否使用ARC的目标。请注意,每个文件都可以使用不同的设置进行编译。这是你问的问题,但是因为我们已经有三个答案,所以我认为我可能会排在第四位。 :)

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

    1. 在导航器中选择您的项目。这将打开项目编辑器。
    2. 在项目编辑器中,选择目标。
    3. 在项目编辑器中,单击构建阶段(不是构建设置)。
    4. 展开编译源构建阶段。
    5. 在这里,您可以看到每个文件的编译器标志。具有该设置的文件是否使用ARC将包括 -fno-objc-arc -fobjc-arc ,分别用于指定MRR或ARC。

答案 2 :(得分:5)

或者只测试一次,在代码中添加:

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

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

答案 3 :(得分:1)

添加" -fno-objc-arc"构建阶段中所有.m文件的编译器标志