Swift 在编译时是否保留方法查找列表,或者是否调用特定内存位置中的函数?
关于this http://davedelong.tumblr.com/post/58428190187/an-observation-on-objective-c
我建议您查看以下链接,尤其是第一个链接,因为它用 C++ 和 Objective-C 的示例解释了概念,以便更好地理解静态、延迟和动态调度(对于方法)之间的区别)。
简而言之:
静态调度
该函数及其实现是在编译时确定的,因此在运行时不会失败(因为除非绑定成功,否则编译器不会继续编译过程)。
延迟发货
功能是在编译时确定的,但实际的实现取决于运行时对象的类型。对于继承很重要。编译器将检查该类或其父类是否声明了该函数,但由运行时来选择使用哪个实现。后期绑定可以使用虚拟表来实现,就像 C++ 的情况一样。
动态调度
该函数是在运行时确定的,在 Objective-C 的情况下可以通过名称调用,因此如果接收者(对象)没有实现或继承可以响应指定消息的方法,则可能会在运行时失败。
参考
- 动态、静态和后期绑定有什么区别? https://stackoverflow.com/questions/22427867/what-is-the-difference-between-dynamic-static-and-late-binding
- 什么是早期绑定和后期绑定? https://softwareengineering.stackexchange.com/questions/200115/what-is-early-and-late-binding/200123#200123
- C++ 中的动态调度和后期绑定有什么区别? https://stackoverflow.com/questions/20187587/what-is-the-difference-between-dynamic-dispatch-and-late-binding-in-c/20187789#20187789
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)