与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的传统中,我们可能会看到更多的这些功能转向编译时间,这为“每瓦性能”提供了一个优势 – 移动计算中的重要考虑.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。