如何在课堂上要求ARC?

时间:2011-12-04 22:59:52

标签: objective-c macros compiler-errors automatic-ref-counting

我有一个包含ARC代码和非ARC代码的应用程序。当我尝试将非ARC代码编译为ARC时,编译器将捕获。如果在没有ARC的情况下错误地编译ARC代码,如何导致编译时错误/通知?显然,代码将编译。它会泄漏。静态分析仪将解决问题。我宁愿找到一种方法来保留编译指示或在我的ARC代码中定义。

Apple在objc-api.h中定义了以下内容:

/* OBJC_ARC_UNAVAILABLE: unavailable with -fobjc-arc */
#if !defined(OBJC_ARC_UNAVAILABLE)
#   if __has_feature(objc_arr)
#       define OBJC_ARC_UNAVAILABLE __attribute__((unavailable("not available in automatic reference counting mode")))
#   else
#       define OBJC_ARC_UNAVAILABLE
#   endif
#endif

我的C-macro-fu很弱。我该如何使用它?或者,或许有更好的符号可以检查?

P.S。我问,因为我从可重用的库中构建了大量的应用程序。我想确保以正确的方式编译每个文件。

2 个答案:

答案 0 :(得分:10)

以下内容应该有效:

#if !__has_feature(objc_arc)
#  error Compile me with ARC, please!
#endif

将其放在文件的顶部。

答案 1 :(得分:-1)

如果它是一个完整的文件,我建议将-fno-objc-arc添加到编译器标志中以使用非弧编译器。

使用宏用非弧编译器编译代码的“部分”。 例如,如果您正在编写一个将在弧和非弧代码库中使用的框架并在此宏块中写入释放,deallocs,请使用此方法