【问题标题】:Are the new object literals backwards compatible with iOS 5?新的对象字面量是否向后兼容 iOS 5?
【发布时间】:2012-10-13 03:35:41
【问题描述】:

我试图弄清楚是否应该开始使用最近添加的对象文字来下标字典、数组等。 This following post 似乎表明iOS5不支持它们,我读到该功能是在iOS6中添加的。

是这样吗?有人在 iOS5 中成功使用了新的文字吗?

【问题讨论】:

    标签: objective-c ios ios5


    【解决方案1】:

    您可以在 Apple 的 Objective-C Feature Availability Index 中找到有关哪些 iOS(和 OS X)版本支持哪些现代 Objective-C 功能的详细信息。

    NSNumber、NSDictionary 和 NSArray 字面量(例如 @{ @"key": @"value" })可以部署到每个 iOS 版本,包括 iOS 5。

    NSDictionary 和 NSArray 下标运算符(例如 myArray[7]myDictionary[@"hello"])可以部署到 iOS 5.0 及更高版本。

    【讨论】:

    • 我认为这些应该依赖于编译器而不是依赖于操作系统。奇怪!
    • @Lefteris 他们都是。您需要一个能够理解新语法的编译器。由于下标使用新消息,因此您还需要支持这些新消息的 Foundation 框架版本。 (新的文字语法使用现有消息。)我链接的文档列出了所需的编译器版本和所需的操作系统版本。但问题只问iOS版本,不问编译器版本。
    • 我不知道它正在创建新消息。我以为他们像我提到的编译器只会改变。谢谢。
    • This clang documentation 描述了如何实现下标(以及更多)。
    【解决方案2】:

    如果您使用 Xcode 4.5 构建源代码,那么可以,只要您使用最新的 LLVM 编译器并针对 iOS SDK 6.0 构建源代码,它们就与 iOS 5 兼容。

    【讨论】:

    • 我对这里的术语有些困惑。 iOS SDK版本和iOS版本号本身基本上没有关系吗? iOS SDK 6.0 是否暗示它可以为 iOS6 或更高版本编译?
    • @glitch:主要有两个组件:iOS SDK 版本和 iOS 部署目标版本。您构建的 SDK 版本决定了您可以在 nib、故事板和代码中实际使用的功能。部署目标是您希望应用程序在其上运行的(最低)iOS 版本。 iOS 6 的一些新功能在 iOS 5 上无法使用,例如自动布局,但其他功能(如 Objective-C 文字)虽然是 iOS SDK 6 的新功能,但属于编译器功能,因此只要您拥有最新的编译器只要您部署到它们,您就可以构建它们以在比 SDK 更早的 iOS 版本上运行。
    • @glitch:所以在这种情况下,如果您将项目的 Base SDK 设置为最新的 iOS (6.0) 并将其部署目标设置为 iOS 5.0,您可以编译 Obj-C 文字,同时获得额外的好处在 iOS 5.0 上运行。
    • 如果我将目标设置为 5.0,xcode 通常会足够聪明地告诉我何时使用的功能仅在 iOS6 中支持?
    • 不,它不会警告你,但有一种方法可以让它警告你。在这里查看我的答案:stackoverflow.com/a/12633309/1155387
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多