所以我有一个简单的iOS项目,必须使用静态库。该库主要以c ++编写,往往是跨平台的。它可以使用Xcode构建。
我创建了一个示例iOS应用程序项目,将库的项目作为子项目添加到它,添加库作为我的iOS应用程序的依赖项。
我的iOS应用使用ARC。在库中我有几个预处理器宏,如
#if __has_feature(objc_arc)
@autoreleasepool
#elif defined(OSX) || defined(IOS)
// something else ...
编译项目时,编译,未启用ARC 。所以“//其他东西......”是在代码而不是“@autoreleasepool”中设置的。
我甚至为库目标和使用这些宏的特定文件设置了额外的-fobjc_arc标志。请看截图。
我使用Xcode版本4.6.2(4H1003),编译器是Apple LLVM 4.2。
有没有人有任何建议为什么会这样?
答案 0 :(得分:0)
我期待它发生了,因为clang在编译C ++时会忽略该选项。您需要使用一个警卫来避免C ++完全看到该声明(@autoreleasepool
在C ++中是非法的):
#ifdef __OBJC__
#if __has_feature(objc_arc)
@autoreleasepool
#elif defined(OSX) || defined(IOS)
// something else ...
#endif
#endif // __OBJC__
在C ++和Objective-C ++之间共享的那些头文件中。
对于我来说,为什么普通的C ++无论如何都会对这个标题感兴趣,因为它无法使用Objective-C对象(只有Objective-C ++才能),这一点并不是很明显。也许你可以扩展它以正确解决这个问题?