2011-12-04 194 views
8

我有一个与ARC代码和非ARC代码的应用程序。当我尝试将非ARC代码编译为ARC时,编译器会捕获。当我的ARC代码在没有ARC的情况下被错误编译时,如何导致编译时错误/注意事项?显然,代码将被编译。它只会泄漏。静态分析器将会发现问题。我宁愿找到一种方法在我的ARC代码中留下编译指示或定义。如何在课堂上要求ARC?

以下是苹果在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-宏观福较弱。我将如何使用它?或者,也许有一个更好的符号来检查?

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

回答

9

下面应该工作:

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

将其放置在你的文件的顶部。

+0

谢谢您的宏。 – adonoho

-1

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

使用宏编译非弧编译器的“部分”代码。 例如,如果您正在编写将用于弧和非弧代码库并写入发布,在此宏块内释放的框架,请使用此代码

+0

作为现代的Xcode v4.2 +,Mugunth允许在项目中混合使用ARC和非ARC代码,并且ARC支持应用程序回到iOS v4.0,所以我宁愿避免使用宏路由,只需将文件移动到ARC中即可我添加了新的功能。关键是要确保此更改传播,因为我和我的客户端的应用程序的新版本已加速。上面的宏是这样做的。感谢您的评论,思想和时间。安德鲁 – adonoho