Ahm*_*cat 5

我建议您查看以下链接,尤其是第一个链接,因为它通过 C++ 和 Objective-C 的示例解释了概念,以便更好地理解静态、延迟和动态调度之间的区别(对于方法)。

简而言之:

静态调度

该函数及其实现是在编译时确定的,因此不会在运行时失败(因为除非绑定成功,否则编译器不会继续编译过程)。

延迟发货

函数是在编译时确定的,但实际的实现取决于运行时对象的类型。对继承很重要。编译器将检查类或其任何父类是否声明了该函数,但由运行时来选择要使用的实现。后期绑定可以使用虚拟表来实现,就像在 C++ 的情况下一样。

动态调度

该函数是在运行时确定的,在 Objective-C 的情况下可以按名称调用,因此如果接收器(对象)没有实现或继承可以响应指定消息的方法,则可能会在运行时失败。

参考