【问题标题】:How to handle non-ARC code in header file?如何处理头文件中的非ARC代码?
【发布时间】:2014-05-29 15:03:19
【问题描述】:

我的项目结构

主要项目 (ARC) 子项目(非 ARC) Boost 库(即这里流行的 C++ 库是一个链接 http://www.boost.org/)

问题:
Boost 库的头文件之一(intrusive_ptr.h)有一个带有“retain”语句的内联函数(该文件由某人编辑,它在“SubProject(Non-ARC)”中工作正常)。该头文件是公开的,在“MainProject”中导入了许多子项目文件,并且这些文件具有该头文件的引用。因此,该文件间接地来自基于 ARC 的 MainProject。这就是编译器拒绝编译的原因。

我知道或尝试过的:
我知道如何设置非 ARC 标志,但我们只能为.m 文件(仅限可编译文件)设置,而不是.h 文件。如果有人可以帮助我或建议我任何开箱即用的解决方案。

有兴趣查看"intrusive_ptr.h" 的人可以在这里找到intrusive_ptr.h。此文件是boost 库的一部分,因此建议也应考虑此库。

任何帮助或指示将不胜感激。

【问题讨论】:

  • “Boost 库的一个头文件有一个带有“retain”语句的内联函数”是什么意思?不,它不是……它是 C++ 那为什么会呢?我看了一下,没找到你在说什么。我必须假设您编辑了该文件,您正在谈论一个不同的文件,或者您从某个奇怪的地方获得了该文件。哪个?
  • @borrrden:您说得对,文件由某人编辑,并且在“子项目(非 ARC)”中运行良好。我可以毫无问题地编译和运行它。
  • 我猜你将不得不这样做 -> stackoverflow.com/questions/9895144/…
  • @borrrden:你的伎俩奏效了。如果你能回答这个问题,那么请我接受。

标签: c++ ios objective-c boost automatic-ref-counting


【解决方案1】:

您可以使用 this answer 中的技术使用预处理器来更改您的头文件

#if __has_feature(objc_arc)
//ARC-specific things
#else
//Non-ARC specific things
#endif

【讨论】:

    【解决方案2】:

    如果您在某些类中需要 Boost 工具,您可以使用 Objective-C++ 隐藏它。帮助链接: http://philjordan.eu/article/strategies-for-using-c++-in-objective-c-projects

    http://support.apple.com/kb/TA45902?viewlocale=en_US

    【讨论】:

      猜你喜欢
      • 2012-02-04
      • 2020-10-16
      • 1970-01-01
      • 2015-03-14
      • 2020-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多