Objective-C 被定义为 C 的扩展。预处理器指令和编译器指令正是它们在 C 中的用途。
Objective-C 语言没有“正式”定义(没有标准)。苹果发布了一份文件,或多或少地解释了它。该语言也没有真正的“版本号”。Apple 有时会添加一项新功能,仅此而已。在某个时刻,Apple 决定将某些功能集推广为“Objective-C 2.0”,但这并不意味着所有以前的版本都具有相同的功能集,也不意味着所有后续版本都将具有相同的功能集。Apple 最近使用的绰号是“现代 Objective-C”,指的是一种支持所有当前定义的功能的语言。
请注意,有些功能是在编译器级别定义的,有些是在库级别定义的,还有一些是两者的混合。如果您使用在编译器级别完全实现的功能(例如新的文字语法),它将适用于您使用该编译器编写和编译的任何程序。但是,如果您使用在库级别定义的功能或需要编译器和库支持的功能,则它仅适用于在最新库可用的系统上运行的程序(Apple 不允许您静态链接语言库) . 例如 GC、ARC 和附加到weak
.
因此:是的,“现代Objective-C”与早期的Objective-C有很大不同,您应该将其视为一个新版本,但是不,它没有附加版本号,Apple很有可能会为该语言添加新功能并且仍然称它为“现代Objective-C”。此外,究竟哪些特性是语言的一部分,不仅取决于编译器,还取决于您正在编译的目标系统。因此,针对 iOS 4 的“现代 Objective-C”程序将能够使用与针对 OsX 10.8 的“现代 Objective-C”程序不同的一组功能。