问题 Pragma明确启用ARC?


有没有 #pragma (或其他一些构造)在Objective-C(或Objective-C ++)源文件中显式启用自动引用计数(ARC)?如果未启用ARC,源文件可能导致编译失败,那就更好了。

我开始拥有一些可以与其他项目共享的ARC源文件。其中大多数都包含扩展内置类的类别方法。我只是不想意外地将它们包含在非ARC项目中并开始泄漏内存。

提前致谢!


3968
2017-11-15 12:09


起源

好问题。尝试用Apple开启雷达。如果源代码未在ARC模式下编译,可能有办法引发错误对开发人员有利。据我所知,在使用-fno-obj-arc set进行编译时,没有出现仅出现错误的语句错误。 - viggio24


答案:


据我所知,没有办法明确启用或禁用ARC。

但是,可以检测它是否已启用。只需将以下代码段添加到任何需要ARC的文件中。

#ifndef __has_feature
  #define __has_feature(x) 0 /* for non-clang compilers */
#endif

#if !__has_feature(objc_arc)
  #error ARC must be enabled!
#endif

更多信息:
http://clang.llvm.org/docs/AutomaticReferenceCounting.html
http://clang.llvm.org/docs/LanguageExtensions.html#__has_feature_extension


12
2017-11-16 15:25