为什么其他语言里叫函数调用, Objective-C 中是给对象发送消息 ?
参考答案:
Objective-C 的设计哲学和语法与其他许多编程语言有着显著的不同,其中之一就是如何处理函数或方法的调用。在其他语言(如 C、C++、Java 等)中,我们通常称之为“函数调用”,因为我们实际上是在调用一个函数或方法,并可能传递一些参数。
但在 Objective-C 中,我们常说“给对象发送消息”,这是因为 Objective-C 是一种基于消息传递的编程语言。这种设计来源于 Smalltalk,一种非常早的面向对象编程语言。
以下是为什么 Objective-C 使用“给对象发送消息”这一术语的几个原因:
- 动态性:Objective-C 支持运行时动态性。这意味着你可以在运行时改变一个对象的行为。当你向一个对象发送消息时,Objective-C 运行时会在运行时决定应该调用哪个方法。这与静态绑定的方法调用(如 C++ 的虚函数或 Java 的方法调用)不同,后者在编译时就确定了要调用的方法。
- 灵活性:由于消息传递机制,Objective-C 能够在运行时决定如何处理消息。例如,如果一个对象没有实现特定的方法,它可以决定如何响应(例如,通过转发消息给其他对象)。
- 与 Smalltalk 的联系:Objective-C 最初是为了与 Smalltalk 兼容而设计的,而 Smalltalk 是一种基于消息传递的语言。因此,使用“发送消息”这一术语也反映了 Objective-C 与 Smalltalk 的这种联系。
- 面向对象的范式:从面向对象的角度来看,将方法调用视为向对象发送消息是一种更自然的方式。你可以想象一个对象具有某种“接口”或“协议”,其他对象可以通过这个接口与其通信。发送消息就是这种通信的一种方式。
需要注意的是,虽然 Objective-C 使用“发送消息”这一术语来描述方法调用,但从底层实现的角度来看,它仍然涉及到函数指针和类似的机制来实际执行方法。但是,从编程模型和语言设计的角度来看,将方法调用视为消息传递提供了一种更灵活和动态的方式来处理对象之间的交互。