Swift是否在编译时保留方法查找列表,或者它是否在特定的内存位置调用函数?关于this
nwlls2ji1#
我建议你看一下下面的链接,尤其是第一个,因为它用C和C的例子解释了概念,以便更好地理解静态,延迟和动态分派之间的区别(对于方法)。简单地说:
函数及其实现在编译时确定,因此不会在运行时失败(因为除非绑定成功,否则编译器不会继续编译过程)。
函数在编译时确定,但实际实现取决于运行时对象的类型。对继承很重要。编译器将检查类或其任何父类是否声明了函数,但由运行时选择使用哪个实现。后期绑定可以像C++那样使用虚拟表来实现。
该函数在运行时确定,在C2C-C的情况下,可以通过名称调用,因此如果接收方(对象)没有实现或继承可以响应指定消息的方法,则可能在运行时失败。
1条答案
按热度按时间nwlls2ji1#
我建议你看一下下面的链接,尤其是第一个,因为它用C和C的例子解释了概念,以便更好地理解静态,延迟和动态分派之间的区别(对于方法)。
简单地说:
静态调度
函数及其实现在编译时确定,因此不会在运行时失败(因为除非绑定成功,否则编译器不会继续编译过程)。
延迟派单
函数在编译时确定,但实际实现取决于运行时对象的类型。对继承很重要。编译器将检查类或其任何父类是否声明了函数,但由运行时选择使用哪个实现。后期绑定可以像C++那样使用虚拟表来实现。
动态调度
该函数在运行时确定,在C2C-C的情况下,可以通过名称调用,因此如果接收方(对象)没有实现或继承可以响应指定消息的方法,则可能在运行时失败。
引用