【问题标题】:Can Blocks built for the iPhone 4 SDK work when deployed to iPhone OS 3.0?为 iPhone 4 SDK 构建的 Blocks 在部署到 iPhone OS 3.0 时可以工作吗?
【发布时间】:2010-07-07 16:21:55
【问题描述】:

如果您将应用程序设置为部署到早期版本,则最新的 Xcode IDE 要求您以 iPhone SDK 4 为目标,同时动态处理已弃用的功能和新功能。

那么,我能否在使用 Blocks 等新功能的同时让它在运行 iPhone OS 3.0 或 3.1 或 3.1.3 的设备上运行?

我还没有找到有关如何向后兼容以前的 iPhone 操作系统版本的文档。如果你能指出我应该如何做的官方文档,我会很感激。

【问题讨论】:

    标签: iphone objective-c ios4


    【解决方案1】:

    据我所知,块在 3.2 之前无法工作,因为不包括块运行时(__NSStackBlock__ 等类)。除此之外,我的理解是,如果您使用足够新的编译器,您可以使用块编译代码。一种解决方案是在您的项目中有条件地包含自定义块运行时。

    【讨论】:

      【解决方案2】:

      虽然最简单的做法是尝试它,但我认为如果它们存在但不使用它们不会造成伤害(例如,您使用运行时 if 语句来规避使用预先代码的块4.0 设备),但它们肯定不会在 4.0 之前的设备上运行,而且 Apple 提供的所有使用块的 API 无论如何都将不可用。总而言之,如果你有办法在没有块的情况下做某事,那么没有理由用不同的方法来做块——这只会增加冗余和重复代码——因此,如果你希望针对 4.0 之前的设备,你不应该使用块,但如果你想/需要使用块,不要针对低于 4.0 的操作系统

      【讨论】:

        【解决方案3】:

        【讨论】:

        • 这并没有真正回答主要问题,尽管这很有用。
        • 你问如何有条件地为旧版本的 iOS 编写代码,你就是这样做的。我错过了什么?
        • 阅读问题的第一段。
        【解决方案4】:

        不,如果没有PLBlocks,块将无法在 iPhone 3.2 之前的版本上运行 — 即使这样,任何获取块的方法都可能不存在。

        【讨论】:

          猜你喜欢
          • 2011-03-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-25
          • 1970-01-01
          相关资源
          最近更新 更多