xcode 我如何知道我的程序是否启用了 ARC?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/11380533/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How do I know if my program has ARC enabled or not?
提问by user705414
I create a project with ARC support using the Xcode project wizard. Compared with a program without ARC support, I did not notice any differences. Is there any hint that can tell me if my program supports ARC?
我使用 Xcode 项目向导创建了一个支持 ARC 的项目。与没有 ARC 支持的程序相比,我没有注意到任何差异。是否有任何提示可以告诉我我的程序是否支持 ARC?
I am using XCode 4.2.1 Build 4D502
我正在使用 XCode 4.2.1 Build 4D502
回答by pasawaya
You can use __has_feature
, maybe logging whether the project has ARC in the console like this:
您可以使用__has_feature
,也许记录项目在控制台中是否有 ARC,如下所示:
#if __has_feature(objc_arc)
// ARC is On
NSLog(@"ARC on");
#else
// ARC is Off
NSLog(@"ARC off");
#endif
Alternatively, instead of just logging whether ARC is on, try making the compiler raise an error if ARC is on (or off) like this:
或者,不要仅仅记录 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
回答by Steven Fisher
If you just want to know one time if your project has ARC, I suggest using jpalten's answer. If you want your code to only build with ARC on, I suggest qegal's.
如果您只想知道您的项目是否有 ARC,我建议您使用 jpalten 的答案。如果您希望您的代码仅在 ARC 上构建,我建议使用 qegal。
However, if you want to know where in Xcode the setting lives:
但是,如果您想知道设置在 Xcode 中的位置:
- Select your project in the navigator. This will open the project editor.
- In the project editor, select your target.
- In the project editor, click Build Settings (if it isn't already selected).
- In the project editor, click the search box and type
OBJC_ARC
.
- 在导航器中选择您的项目。这将打开项目编辑器。
- 在项目编辑器中,选择您的目标。
- 在项目编辑器中,单击 Build Settings(如果尚未选择)。
- 在项目编辑器中,单击搜索框并键入
OBJC_ARC
。
This will leave a single line showing in Build Settings, either Objective-C Automatic Reference Countingor CLANG_ENABLE_OBJC_ARC(depending on whether you're showing setting descriptions or names). If it's set to YES, you have ARC on.
这将在 Build Settings 中显示一行,Objective-C Automatic Reference Counting或CLANG_ENABLE_OBJC_ARC(取决于您是显示设置描述还是名称)。如果它设置为 YES,则您打开了 ARC。
This is your target's pick of whether ARC is used. Note that each filecan be compiled with a different setting. This is notwhat you asked, but since we already have three answers I thought I'd head off a possible fourth. :)
这是您的目标选择是否使用 ARC。请注意,每个文件都可以使用不同的设置进行编译。这不是你问的问题,但由于我们已经有了三个答案,我想我可能会选择第四个。:)
To see which files override the ARC setting:
要查看哪些文件覆盖了 ARC 设置:
- Select your project in the navigator. This will open the project editor.
- In the project editor, select your target.
- In the project editor, click Build Phases(not Build Settings).
- Expand the Compile Sourcesbuild phase.
- 在导航器中选择您的项目。这将打开项目编辑器。
- 在项目编辑器中,选择您的目标。
- 在项目编辑器中,单击Build Phases(而不是 Build Settings)。
- 展开编译源构建阶段。
Here, you can see the compiler flags for each file. Files with that set whether or not to use ARC will include either -fno-objc-arcor -fobjc-arc, for specifying MRR or ARC respectively.
在这里,您可以看到每个文件的编译器标志。设置是否使用 ARC 的文件将包括-fno-objc-arc或-fobjc-arc,分别用于指定 MRR 或 ARC。
回答by jpalten
Or to test just once, add this in your code:
或者只测试一次,在你的代码中添加:
NSString* dummy = [[[NSString alloc] init] autorelease];
This should raise an error if you are using ARC. If it does, ARC is enabled, all is fine and you can remove it again.
如果您使用的是 ARC,这应该会引发错误。如果是,则 ARC 已启用,一切正常,您可以再次将其删除。
回答by holybiner
add "-fno-objc-arc" compiler flags for all the .m files in build phases
在构建阶段为所有 .m 文件添加“-fno-objc-arc”编译器标志