虚拟方法 – Swift是否具有动态调度和虚拟方法?

来自C / Java / C#背景我期待在 Swift中看到虚拟方法,但是阅读swift文档,我没有提到虚拟方法.

我失踪了什么

与C不同,Swift中没有必要指定一个方法是虚拟的.编译器将确定使用以下哪项:

(性能指标当然取决于硬件)

>内联方法:0 ns
>静态调度: 1.1ns
>虚拟派遣1.1ns(如Java,C#或C指定时).
>动态调度4.9ns(如Objective-C).

Objective-C当然总是使用后者. 4.9ns的开销通常不是问题,因为这将代表总体方法执行时间的一小部分.不过,如有需要,开发商可以无缝地回溯到C或C.然而,在Swift中,编译器将分析哪一个可以使用的速度最快,并尝试代表您,有利于内联,静态和虚拟,但保留Objective-C互操作性的消息传递.它可以标记一个方法与动态来鼓励消息传递.

这一点的一个副作用是,动态调度提供的一些强大功能可能不可用,其中由于以前可能被认为是任何Objective-C方法的情况.动态调度用于方法截取,反过来使用:

>可可风格的财产观察员.
> CoreData模型对象检测.
>面向方面的编程

上述特征是由后期绑定语言提供的功能.请注意,虽然Java使用vtable dispatch进行方法调用,但它仍然被认为是后期绑定语言,因此通过拥有虚拟机和类加载器系统能够实现上述功能,这是提供运行时工具的另一种方法. “Pure”Swift(没有Objective-C interop)就像C一样,是一种具有静态调度功能的直接可执行编译语言,那么这些动态特性在运行时是不可能的.在ARC的传统中,我们可能会看到更多的这些功能转向编译时间,这为“每瓦性能”提供了一个优势 – 移动计算中的重要考虑.

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...