iphone – 如何知道编译器是否启用ARC支持?

iphone – 如何知道编译器是否启用ARC支持?,第1张

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

该声明应该是预处理定义为:

myObject ...#if ARC   // do nothing#else   [myObject release]#endif

或运行时过程如下:

if (ARC) {   // do nothing} else {   [myObject release];}

我能怎么做?

请帮帮我!谢谢.

解决方法 你可以使用__has_feature,像这样:

#if __has_feature(objc_arc)// ARC is On#else// ARC is Off#endif

如果您也想使用GCC(Apple的GCC不支持ARC)构建,您可能还需要以下内容来确定编译器

#if defined(__clang)// It's Clang#else// It's GCC#endif

更新

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

#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

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

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

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

总结

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

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1062523.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存