【问题标题】:ARC enabled App will run in lower version of ios启用 ARC 的应用程序将在较低版本的 ios 中运行
【发布时间】:2012-04-23 12:27:50
【问题描述】:

我已经使用启用 ARC 的 xcode 4.3.2 开发了一个应用程序,我的应用程序用户拥有 ios3.2、ios4.0、ios5.0 设备我如何为较低版本的 ios 设备使用提供支持。我需要做什么代码方面的任何东西。或者有什么方法可以动态设置ARC。

任何人对此有任何想法请与我分享。 谢谢

【问题讨论】:

    标签: objective-c ios ios5 ios4 automatic-ref-counting


    【解决方案1】:

    ARC 不依赖于设备或操作系统(请参阅下面的注释)。它是 LLVM 编译器功能(可以使用 -fno-objc-arc 编译器标志禁用)。编译器管理内存而不是程序员。最终的可执行文件彼此之间不会有太大的不同,并且可以在为您的项目指定的最低操作系统上运行(如果您不使用 ARC 特定的关键字等)。

    注意: 根据 Apple 的Transitioning to ARC Release Notes from Apple,ARC 编译的可执行文件只能在 iOS 4 及更高版本上运行。此外,弱引用仅在 iOS 5 上受支持。

    【讨论】:

    • 实际上,如果你使用 @autoreleasepool 关键字,它确实会引入操作系统依赖,因为它的实现依赖于 ARC 之前不存在的运行时函数。
    • 但是我的一些用户报告我在较低版本的 ios 设备应用程序崩溃是由于启用了 ARC 而发生的,你确定这种崩溃不是因为 ARC
    • @JonathanGrynspan 根据 Apple 的说法,“@autoreleasepool 甚至可以在非 ARC 代码中工作。” developer.apple.com/library/ios/#releasenotes/ObjectiveC/…
    • 是,但不是 pre-ARC 代码,即在不支持 ARC 的操作系统上运行的代码。
    【解决方案2】:

    只需将目标部署设置为您的用户可能使用的最低 iOS 版本。自动引用计数仅在 Xcode 中编译应用程序时。启用应用程序的 ARC 的内存由编译器 (Xcode) 管理。因此,您无需担心设备的目标 iOS 版本。只需将 Target Deployment 设置为 3.2 或 4 等即可。

    【讨论】:

    • 但根据苹果文档,它将支持 ios4.0 和最新版本实际上是什么意思developer.apple.com/library/ios/#releasenotes/ObjectiveC/…
    • 尝试在 xcode 中将部署目标设置为 3.2,看看会发生什么。这是一个事实,ARC 仍然在编译器域中,编译器负责所有的内存管理,所以如果编译后的代码已经在内存方面进行了管理,那么它应该支持以前的 iOS 4 版本。
    【解决方案3】:

    我认为至少不能保证它在 iOS 3.x 上正常工作。见Transitioning to ARC Release Notes from Apple

    Xcode 4.2 支持 Mac OS X v10.6 和 v10.7(64 位应用程序)以及 iOS 4 和 iOS 5。Mac OS X v10.6 和 iOS 4 不支持弱引用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-13
      • 2012-06-12
      • 2013-10-16
      • 1970-01-01
      • 2020-11-25
      • 1970-01-01
      相关资源
      最近更新 更多