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

Swift是否使用消息调度方法?

发布时间:2020-12-14 05:21:05 所属栏目:百科 来源:网络整理
导读:我确定我的术语已经关闭,所以这是一个例子: C/C++有方法和虚方法.两者都有机会在编译时进行内联. C#的CIL有call和callvirt指令(非常类似于C方法和虚方法).虽然C#中的几乎所有方法调用都变成了callvirt(由于语法错误),JIT编译器能够优化大多数返回调用指令,
我确定我的术语已经关闭,所以这是一个例子:

> C/C++有方法和虚方法.两者都有机会在编译时进行内联.
> C#的CIL有call和callvirt指令(非常类似于C方法和虚方法).虽然C#中的几乎所有方法调用都变成了callvirt(由于语法错误),JIT编译器能够优化大多数返回调用指令,然后(如果值得的话)也内联它们.
> Objective-C方法调用完全不同(并且效率低下);每次调用方法时都会通过objc_msgsend传递一个消息对象,它是动态调度的一种形式,永远不能内联.

阅读Swift语言specification for functions,我不知道Swift是否使用与Objective-C相同的消息系统或其他不同的消息系统.

有时是,有时没有.如果您有纯swift代码,并且不使用@objc装饰将类/协议暴露给Objective-C,则看起来不会通过objc_msgSend调度pure-swift方法调用,但在其他情况下它们是.如果你的swift对象采用的协议是在Objective-C中声明的,或者swift协议是用@objc修饰的,那么通过objc_msgSend调度方法调用协议方法,甚至从swift对象到其他swift对象.

文档目前有点薄;我确定还有其他的细微差别……但从经验上来说(即我已经尝试过了)一些快速的方法调用通过objc_msgSend而其他人则没有.我认为获得最佳性能将取决于保持您的代码尽可能多的纯粹swift并尽可能少地跨越Obj-C / swift边界,并通过瓶颈接口/协议,以限制快速调用的数量必须动态调度.

我相信迟早会出现更详细的文档.

(编辑:李大同)

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

    推荐文章
      热点阅读