如何在Xcode中知道Objective-C语言版本

Job*_*ose 5 iphone cocoa-touch objective-c ios

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

Cœu*_*œur 5

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
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • NS_ENUMNS_OPTIONS在 Xcode 4.5 中添加
  • NSDictionaryNSArray在 Xcode 4.4 / 4.5 中添加了下标
  • @YES@NO文字被添加到 Xcode 4.4 / 4.5
  • NSNumber,NSDictionary并且NSArray在 Xcode 4.4 中添加了文字
  • @autoreleasepool 在 Xcode 4.2 中添加了块
  • Objective-C 2.0 ”是很古老的东西(Xcode 2.x)

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

有关的:


Abh*_*shi 1

Objective-C 运行时有两个版本\xe2\x80\x94\xe2\x80\x9cmodern\xe2\x80\x9d 和 \xe2\x80\x9clegacy\xe2\x80\x9d。iPhone 应用程序和 OS X v10.5 及更高版本上的 64 位程序使用现代版本的运行时。检查在此处查看

\n\n

Objective-c中引入的所有主要功能,您可以在这里查看

\n