奇思妙想 · 2024年 4月 15日 0

ObjC为什么能实现动态消息传递?

31 次浏览

乍看ObjC的消息传递,和普通函数调用没什么区别。Objective-C 利用了其运行时系统(Runtime System)来实现动态消息传递。运行时系统是 Objective-C 的一部分,它允许在运行时动态地添加、修改和查询类和对象。运行时系统提供了动态查找方法实现的能力,当一个对象接收到一个消息时,运行时系统会查找该对象的方法列表,以确定是否有匹配的方法。换句话说,C和C++为什么只能编译期绑定方法,不能编译通过一个运行期才能找到的方法的根本原因,在于C/C++语言是更加静态的语言,而ObjC设计之初,就期望并不受编译期束缚,哪怕写了一个当前编译器找不到的方法,没关系,编译器依然相信运行期有机会找到。