1.4 Objective-C运行时

理解Objective-C最基本的一点是,Objective-C是一种带有动态运行时的编译型语言。这就意味着该语言可以通过编译器编译,支持静态、编译时的类型检查,同时还可以链接到支持方法动态调度的运行时。利用动态运行时可以进行很多只有脚本语言可以做到的事情,比如“鸭子类型”和对象自省。

说明

鸭子类型指的是语言类型安全的一种类型,该类型假定如果一个对象“看起来像是鸭子,叫声像鸭子,就一定是鸭子”。这和静态类型是相对的。对于静态类型的情况,为了使得该语言可以解析其方法,对象必须是所声明的类型。两种技术都有各自的优缺点,但对于Objective-C来说,鸭子类型使得该语言具备了很多很酷的功能。

实际上主要有两种Objective-C 运行时:64位机上和iPhone上使用的“现代运行时”,以及在32位Mac OS X及其他地方使用的“遗留运行时”。“现代运行时”中有一些很有利于开发的特性,但由于未广泛使用,本书所使用的代码示例都是针对遗留运行时的。现代运行时完全向后兼容遗留运行时,所以不会对编写代码造成任何问题。在现代运行时环境有明显优势的地方,我会通过文字提示以供参考。

在编译应用的时候,Objective-C运行时就会自动添加到应用中。除了需要使用一些高级功能的情况,使用它是完全透明的。到目前为止,需要理解的就是运行时在处理动态类型和静态类型方面的能力。这是Objective-C相对于其他编程语言的一个特色。

这种能力的一个副作用就是id数据类型的引入。id数据类型是Objective-C中一种特殊的对象类型。id类型的变量可以存放任意类型的对象。第3章中会详细介绍。

目录