【问题标题】:Could i build a ARC framework and use it in a non-ARC project?我可以构建一个 ARC 框架并在非 ARC 项目中使用它吗?
【发布时间】:2011-12-19 12:37:04
【问题描述】:

我认为标题很好地解释了我的问题,我目前正在开发一个满足我个人需求的小型框架,并考虑使用 ARC 构建它(如果可能的话?),并将其用于旧项目中是在 ARC 之前建造的吗?

【问题讨论】:

    标签: iphone frameworks automatic-ref-counting


    【解决方案1】:

    是的,有一点需要注意:如果您将 iOS 4.x 作为部署目标,则需要一个补充库来处理旧运行时上的 ARC 编译代码。对于使用 ARC 构建的应用程序,它与应用程序一起打包。如果您在非 ARC 应用程序中使用 ARC 编译的库,则不包括在内。

    您可以手动将此库链接到您的非 ARC 应用程序,以避免在旧操作系统版本上出现运行时问题,方法是在应用程序的其他链接器标志中添加 -fobjc-arc

    请参阅this Apple Developer Forums thread 了解更多关于此的讨论。

    【讨论】:

    • 我刚才在一个项目中实际上已经尝试过了,但它没有帮助,你有机会看看吗? stackoverflow.com/questions/8375233/…
    • 为什么会出现运行时问题? ARC 不是在编译时做的吗?
    • @ZakyGerman - ARC 不仅仅是在正确的位置注入 -retain-release,它还引入了新的 @autoreleasepool 之类的东西,因此它需要一些运行时帮助。这是 iOS 5.0 内置的,但 4.x 需要这个向后兼容库。
    • @Brad Larson - 这对我来说很有意义,但我在 -fobjc-arc LINKER 标志上找不到任何文档。你有指向文档的指针吗?我认为 man ld 会显示它,但我没有看到它......
    • 你的意思是 -fno-objc-arc 标志吗?
    【解决方案2】:

    您可以链接到 Apple 提供的胶水库(正如布拉德在上面的回答中所说)。但是,__weak 变量限定符与 4.3 以下的操作系统不兼容(如此处所述:iOS 5 Best Practice (Release/retain?) 在 sudo 的评论中)。

    【讨论】:

      【解决方案3】:

      应该没问题。该库已经编译,所以 ARC/NonARC 不再重要了。

      【讨论】:

      • 较旧的运行时和启用 ARC 的静态库存在一个潜在问题,我已在回答中详细说明。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-12
      • 2013-05-11
      • 1970-01-01
      • 2012-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多