加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 05:37:00 所属栏目:百科 来源:网络整理
导读:来自C / Java / C#背景我期待在 Swift中看到虚拟方法,但是阅读swift文档,我没有提到虚拟方法. 我失踪了什么 与C不同,Swift中没有必要指定一个方法是虚拟的.编译器将确定使用以下哪项: (性能指标当然取决于硬件) 内联方法:0 ns 静态调度: 1.1ns 虚拟派遣1.
来自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的传统中,我们可能会看到更多的这些功能转向编译时间,这为“每瓦性能”提供了一个优势 – 移动计算中的重要考虑.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读