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