Objective-C语言特性深度解析
1. 面向对象编程与Objective-C的独特之处
在众多编程语言中,不同语言对于对象的定义和处理方式存在差异。在一些语言里,一切皆为对象,像数字字面量、字符字面量等。但在Objective - C(以及C++、C#和Java等)中,存在非对象的字面量类型。例如在Smalltalk里,你可以编写 3 timesDo: [ drawSomething ]
这样的代码,因为输入的 “3” 实际上是一个对象。而在Objective - C中原本并非如此,不过借助新的字面量语法,类似的行为也逐渐可行,比如 [@3 description]
会返回 @"3"
。
“面向对象编程” 这一术语的出现,源于软件行业意识到过程式编程无法满足所有软件项目的需求。当时,任何支持对象概念的语言都被视为 “面向对象” 语言。如今,除了新兴的函数式语言,大多数新语言被称为面向对象语言,主要是因为它们拥有基于类、子类化以及接口或协议概念的内置可扩展对象系统。
Objective - C和Smalltalk还有一个显著特征:消息传递。消息和消息传递的概念在Objective - C和Smalltalk中根深蒂固,将它们视为面向消息的编程语言是很合适的。接下来,我们详细探讨消息传递机制。
2. 消息传递机制
从开发者的角度看,消息通过方括号语法发送给接收者。实际上,编译器会将Objective - C的方括号语法转换为C函数调用。例如下面两行代码是等价的,但开发者通常无需自己调用 objc_msgSend
: