【问题标题】:How to know the Objective-C language version in Xcode如何知道 Xcode 中的 Objective-C 语言版本
【发布时间】:2016-06-03 07:32:27
【问题描述】:

有什么方法可以检查我在我的应用程序中使用的 Objective-C 版本

【问题讨论】:

  • 您的意思是操作系统版本吗?您可以使用这些[[UIDevice currentDevice] systemVersion] 检查系统版本
  • 为什么要在 Xcode 中?那该怎么办?
  • 检查您在构建设置中使用的 Objective-C 编译器
  • 请参阅此寻求帮助:Runtime Versions and Platforms

标签: ios objective-c iphone cocoa-touch


【解决方案1】:

Objective-C 级别的语言支持由用于编译代码的 Clang 版本定义,它本身与 Xcode 的版本非常接近。

#if __clang_major__ >= 11
    NSLog(@"My Objective-C language support is what Apple Clang/Xcode 11.x can support.");
    // This language version supports the additional features/fixes written under "Apple Clang Compiler"
    // https://developer.apple.com/documentation/xcode_release_notes/xcode_11_release_notes
    // Notably this version adds Objective-C support to:
    // - `[[clang::no_destroy]]` and `[[clang::always_destroy]]`

#elif __clang_major__ >= 10
    NSLog(@"My Objective-C language support is what Apple Clang/Xcode 10.x can support.");
    // This language version supports the additional features/fixes written under "Apple Clang Compiler"
    // https://developer.apple.com/documentation/xcode_release_notes/xcode_10_release_notes
    // Notably this version adds macro support to:
    // - detect most builtin pseudo-functions with `__has_builtin`

#elif __clang_major__ >= 9
    NSLog(@"My Objective-C language support is what Apple Clang/Xcode 9.x can support.");
    // This language version supports the additional features/fixes written under "Apple LLVM Compiler and Low-Level Tools"
    // https://developer.apple.com/library/archive/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//apple_ref/doc/uid/TP40001051-CH1-SW878
    // Notably this version adds Objective-C support for:
    // - the `@available` language feature

#elif __clang_major__ >= 8
    NSLog(@"My Objective-C language support is what Apple Clang/Xcode 8.x can support.");
    // This language version supports the additional features/fixes written under "Objective-C and C++"
    // https://developer.apple.com/library/archive/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//apple_ref/doc/uid/TP40001051-CH1-SW78
    // Notably this version adds Objective-C support for:
    // - the `@property (class)` language feature

#elif __clang_major__ >= 7
    NSLog(@"My Objective-C language support is what Apple Clang/Xcode 7.x can support.");
    // This language version supports the additional features/fixes written under "Objective-C"
    // https://developer.apple.com/library/archive/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//apple_ref/doc/uid/TP40001051-CH1-SW326
    // Notably this version adds Objective-C support for:
    // - `CF_RETURNS_NOT_RETAINED` and `CF_RETURNS_RETAINED`
    // - `__kindof`
    // - `_Nullable`, `_Nonnull`, and `_Null_unspecified`
    // - Lightweight generics like `NSArray<UIImage *> *` and `NSDictionary<NSString *, NSURL *>`

#elif __clang_major__ >= 6
    NSLog(@"My Objective-C language support is what Apple Clang/Xcode 6.x can support.");
    // This language version supports the additional features/fixes written at:
    // https://developer.apple.com/library/archive/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//apple_ref/doc/uid/TP40001051-CH1-SW453

#else
    NSLog(@"My Objective-C language support is so old that I won't even be allowed to publish this on any App Store nowadays.");

#endif

如果您需要更精确的版本,您也可以使用__clang_minor__

建议尽可能使用__has_builtin 来检查Objective-C 语言功能的可用性,而不是__clang_major____clang_minor__

其他一些值得注意的较旧的历史语言功能,您甚至不应该再费心测试可用性:

  • NS_ENUMNS_OPTIONS 在 Xcode 4.5 中添加
  • Xcode 4.4 / 4.5 中添加了NSDictionaryNSArray 下标
  • 在 Xcode 4.4 / 4.5 中添加了 @YES@NO 文字
  • Xcode 4.4 中添加了NSNumberNSDictionaryNSArray 文字
  • Xcode 4.2 中添加了@autoreleasepool
  • Objective-C 2.0”是非常古老的东西(Xcode 2.x)

最后,“Modern Objective-C”只是指任何当前可用的 Xcode 对 Objective-C 的支持。

相关:

【讨论】:

    【解决方案2】:

    Objective-C 运行时有两个版本——“现代”和“传统”。 OS X v10.5 及更高版本上的 iPhone 应用程序和 64 位程序使用现代版本的 runtime.check here

    objective-c中引入的所有主要特性,可以查看here

    【讨论】:

      猜你喜欢
      • 2021-08-24
      • 2019-02-14
      • 2018-03-02
      • 1970-01-01
      • 1970-01-01
      • 2020-06-21
      • 1970-01-01
      • 2019-08-09
      • 1970-01-01
      相关资源
      最近更新 更多