iOS   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了iphone – 如何知道编译器是否启用ARC支持?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我需要在我的iOS应用程序中编写一个lib. 该声明应该是预处理定义为: myObject ... #if ARC // do nothing #else [myObject release] #endif 或运行时过程如下: if (ARC) { // do nothing } else { [myObject release]; } 我能怎么做? 请帮帮我!谢谢. 你
我需要在我的iOS应用程序中编写一个lib. @H_801_19@ @H_801_19@该声明应该是预处理定义为:

@H_801_19@ @H_526_23@myObject ... #if ARC // do nothing #else [myObject release] #endif @H_801_19@或运行时过程如下:

@H_801_19@
if (ARC) {
   // do nothing
} else {
   [myObject release];
}
@H_801_19@我能怎么做?

@H_801_19@请帮帮我!谢谢.

解决方法

你可以使用__has_feature,像这样: @H_801_19@ @H_801_19@
#if __has_feature(objc_arC)
// ARC is On
#else
// ARC is Off
#endif
@H_801_19@如果您也想使用GCC(Apple的GCC不支持ARC)构建,您可能还需要以下内容来确定编译器:

@H_801_19@
#if Defined(__clang)
// It's Clang
#else
// It's GCC
#endif
@H_801_19@更新

@H_801_19@结合起来,他们将采取一般形式:

@H_801_19@
#if Defined(__clang)     

 #if !defined(__has_featurE)
 // idk when clang introduced this
 #error This version of clang does not support __has_feature
 #endif

 #define MON_IS_ARC_ENABLED_IN_THIS_TRANSLATION __has_feature(objc_arC)

 #else
 // for every compiler other than clang:

 #if Defined(__has_featurE)
 #error Another compiler supports __has_feature
 #endif

 #define MON_IS_ARC_ENABLED_IN_THIS_TRANSLATION 0

 #endif
@H_801_19@然后只需在您的来源中使用MON_IS_ARC_ENABLED_IN_THIS_TRANSLATION或进一步#define.

@H_801_19@如果您使用的编译器添加支持,则必须添加一个案例(在这种情况下,编译器错误可能会捕获错误,因为可能禁止使用引用计数操作).

@H_801_19@请注意,这有额外的检查,以证明如何(并且应该)避免定义保留的标识符(基于注释中的对话).这不是详尽无遗,而是示范.如果您发现自己经常写条件__has_feature检查,您可能需要为此定义一个新的宏,以减少和简化定义.

大佬总结

以上是大佬教程为你收集整理的iphone – 如何知道编译器是否启用ARC支持?全部内容,希望文章能够帮你解决iphone – 如何知道编译器是否启用ARC支持?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。