函数派发机制

 

10、理解Swift中方法的派发机制_海森堡_lichangan的博客-CSDN博客_swift 方法派发

Swift函数派发机制 - 掘金

3种:直接派发,函数表派发,消息机制派发

直接派发:就是那种在编译时期就能确定函数的执行体的函数,比如final修饰的函数,private修饰的函数,extension里面的函数,结构体的函数,在编译的优化过程中,会将这些函数执行的地址内联起来提高cpu执行的效率

函数表派发:有多态性质的函数的调用机制,会将这些方法统一存放在对象的那个结构体当中,有一个属性指向函数表的地址,函数表是个数组,每一项存储的是函数的执行地址。

消息机制派发:oc的方法调用机制,跟isa有关 objc_mgsend吧啦吧啦。。

值得注意的是协议类型的函数派发机制:

protocol MyProtocol {
    func teach()
}
extension MyProtocol{
    func teach(){ print("MyProtocol") }
}
class MyClass: MyProtocol{
    func teach(){ print("MyClass") }
}
let object: MyProtocol = MyClass()
object.teach()

let object1: MyClass = MyClass()
object1.teach()

//打印
//MyClass
//MyClass
protocol MyProtocol {
}
extension MyProtocol{
    func teach(){ print("MyProtocol") }
}
class MyClass: MyProtocol{
    func teach(){ print("MyClass") }
}
let object: MyProtocol = MyClass()
object.teach()

let object1: MyClass = MyClass()
object1.teach()

//打印
//MyProtocol
//MyClass

这是因为,swift是强类型语言,在编译的时候要确定类型,协议类型低层是extension container这样的一个存储结构,当协议里面没有声明某个方法,而是在extension里面声明的话,他就是直接派发机制,在编译的时候就确定了,不会再被继承者重写。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值