在非ARC项目中使用ARC静态库

18

我正在努力解决这个问题。我知道如何使不使用ARC的文件或静态库与ARC项目一起工作。例如,使用编译器标志-fno-objc-arc

但是如果我有一个不使用ARC并想要包含已编译为ARC的静态库的项目呢?每次想要构建项目时,它都会告诉我无法识别像“strong,__unsafe_unretained”等内容。


只是好奇,为什么你不能在你的项目中开启ARC并向所有文件添加编译器标记呢?你需要禁用ARC的具体原因是什么? - sudo rm -rf
该项目是一段时间前构建的,还使用了许多其他第三方非ARC框架。因此,逐个检查所有文件并设置编译器标志将是一个繁琐的过程。我希望有一个更好/更清洁的解决方案,这样我就不需要在超过300个源文件上填写编译器标志... :) - Yannick
你知道 ARC 迁移工具允许你基本上“选择所有”文件来添加标志吗?至少在 Xcode 4.2 中,没有必要手动处理所有文件。 - sudo rm -rf
在进行“转换为 Objective-C ARC…”菜单项中的操作之前或之后,您必须按下“预检查”按钮吗?还是 ARC 迁移工具位于其他位置? - Yannick
应该是之前,但我不太记得确切时间,因为我现在没有带我的 Mac。 - sudo rm -rf
2个回答

16
为了补充shw的回答,需要在构建阶段的编译器标志下添加-fobjc-arc,以使ARC文件能够正确编译非ARC项目。
更多信息在这里

8

应该可以正常工作-您确定在这个非ARC项目中使用的是最新的苹果编译器而不是GCC吗?


1
如果我这样做,就需要从我的项目中删除所有的保留/释放调用,并基本上开始对整个项目进行ARC。但我不想这样做,因为它有一些旧的遗留代码和一些结构。 - Yannick
1
不,你并不是——ARC是一种额外的编译器功能,如果你不想使用它,你就不必使用它。使用最新的Apple LLVM并不意味着你必须使用ARC——这是你的选择(当你创建新项目时,它甚至会给你使用ARC或不使用ARC的选择)。使用它并不意味着你必须将旧代码转换为ARC。区别在于它理解所有这些新关键字等内容。 - shw
1
没错,你说得对。我以为我必须开始使用 ARC,但他只是抱怨了几个遗漏的 __bridged 转换和其他一些错误!谢谢! - Yannick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接