【问题标题】:How to require ARC in a class?如何在课堂上要求 ARC?
【发布时间】:2012-01-12 20:06:12
【问题描述】:

我有一个包含 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-macro-fu 很弱。我将如何使用它?或者,也许有更好的符号来检查?

附:我问是因为我的大部分应用程序都是从可重用的库中构建的。我要确保每个文件都以正确的方式编译。

【问题讨论】:

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


    【解决方案1】:

    以下应该有效:

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

    将它放在文件的顶部。

    【讨论】:

      【解决方案2】:

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

      使用宏通过非弧编译器编译“部分”代码。 例如,如果您正在编写一个将在 arc 和 non-arc 代码库中使用的框架并在此宏块内编写 release、deallocs 时使用它

      【讨论】:

      • Mugunth,作为现代 Xcode,v4.2+,允许在项目中混合 ARC 和非 ARC 代码,并且 ARC 支持回到 iOS v4.0 的应用程序,我更喜欢避免宏路线,只是在我添加新功能时将文件移至 ARC。关键是要确保随着我和我的客户应用程序的新版本的更新而传播此更改。上面的宏就是这样做的。感谢您的评论、想法和时间。安德鲁
      猜你喜欢
      • 1970-01-01
      • 2011-12-10
      • 2019-07-03
      • 2019-03-26
      • 1970-01-01
      • 2015-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多