美文网首页
Swift 派发机制

Swift 派发机制

作者: NapoleonY | 来源:发表于2020-04-19 15:18 被阅读0次
swift 派发

表格总结如下:

  1. 值类型使用直接派发
  2. 协议、类的初始化声明使用函数表派发
  3. 协议、类的 extension 使用直接派发
  4. NSObject 类初始化声明也是函数表派发
  5. NSObject 类 extension 使用消息机制派发

题目

  1. 大家请看下面这段代码的答案是啥
protocol Drawing {
  func render()
}

extension Drawing {
  func circle() { p rint("protocol")}
  func render() { circle()}
}

class SVG: Drawing {
  func circle(){ print("class") }
}

SVG().render()

// what's the output?

答案是 "protocol"。 protocol 的 extension 中声明的方法是直接派发,编译的时候就已经确定了调用地址,类无法重写实现

protocol SeaFood {
}
extension SeaFood {
    func makeFood() {
        print("seaFood makeFood")
    }
}
struct Person: SeaFood {
    func makeFood() {
        print("person makeFood")
    }
}

let a: SeaFood = Person()
let b: Person = Person()
a.makeFood()
b.makeFood()

答案:a.makeFood() 为 seaFood makeFood,b.makeFood() 为 person makeFood。makeFood() 在 protocol extension 声明,是直接派发,编译期确定函数指针。a、b 声明是什么,就是什么。
如果更改上述代码为

protocol SeaFood {
    func makeFood()
}
extension SeaFood {
    func makeFood() {
        print("seaFood makeFood")
    }
}
struct Person: SeaFood {
    func makeFood() {
        print("person makeFood")
    }
}

let a: SeaFood = Person()
let b: Person = Person()
a.makeFood() 
b.makeFood() 

答案:均输出 person makeFood。makeFood() 在 protocol 中声明,为函数表派发,运行时确定函数的指针,最终 a、b是什么,才是什么

参考

  1. 深入理解 Swift 派发机制
  2. Swift函数派发机制

相关文章

  • Swift派发机制

    Swift之所以速度比Object-c快,我觉得跟他的派发机制有关。下面我们聊聊Swift的派发机制。 派发机制分...

  • 浅谈Swift派发机制

    函数的派发机制分为:静态派发(直接派发)、函数表派发、消息派发 1、Swift中所有ValueType(值类型:S...

  • iOS知识复习笔记(16)---swift相关

    一、函数的派发方式 swift函数的派发机制有三类:static直接派发(静态)派发、table函数派发,mess...

  • Swift派发机制

    Swift派发分:静态派发和动态派发 静态派发:(又叫:直接调用) 静态派发机制,同时支持值类型和引用类型;静态派...

  • Swift的函数派发

    前言 对于Swift的学者来说函数派发有很大的误区:就是认为Swift沿用Objective-C的消息派发机制,且...

  • Swift 派发机制

    此篇博客用来自我学习,来源戴铭大佬的这篇博客 Swift 派发机制 派发目的是让 CPU 知道被调用的函数在哪里。...

  • Swift 派发机制

    表格总结如下: 值类型使用直接派发 协议、类的初始化声明使用函数表派发 协议、类的 extension 使用直接派...

  • Swift 派发机制

    https://medium.com/@bakshioye/static-vs-dynamic-dispatch-...

  • Swift - 三种函数派发

    Swift 的函数派发可以分为 静态 和 动态 两种机制,而动态派发又分为 函数表派发 和 消息派发 。 Swif...

  • Swift 函数派发机制

    原文:Method Dispatch in Swift作者:Brian King 派发机制是程序判断如何去调用函数...

网友评论

      本文标题:Swift 派发机制

      本文链接:https://www.haomeiwen.com/subject/zjusbhtx.html