该声明应该是预处理定义为:
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支持?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)