前言
hello,小伙伴们:在忙碌中闲暇之余给大家聊聊swift的知识点,今天给大家带来的是swift中结构体与类的方法调度详细区别,希望对你有所帮助,好了废话不用多说,接下来步入主题!
1.普通方法时两者方法调度的区别
● 结构体中的普通方法调度是静态派发的方式 ○ 详细分析会在以后: 方法调度之普通结构体方法 阐述 ● 类中的普通方法是以函数派发的方式去调度的。 ○ 详细分析会在以后:方法调度之普通方法 阐述
2.协议中两者方法调度的区别
● 以类/结构体直接声明的,
○ 结构体:方法调度都是静态调度
○ 类:方法调度都是函数调度
● 以协议类型声明的, 无论协议的实现是类还是结构体:
○ 方法最初定义在协议本身内, 则方法以协议函数表的方式调度
○ 方法最初定义在协议延展内, 则方法以静态派发的方式调度
3.extension对类中方法调度的影响
extension PersonClass { func changClassName10() {} }
SIL代码:
断点,汇编跟踪一下:
可以看到 changClassName10 这个方法在执行的时候,由function_ref修饰,sil_vtable 中的函数列表里面没有。在编译时已经确定了函数的地址,运行时,直接执行。所以延展内的方法是静态派发。
请发表评论