swift中函数派发机制

OC中

OC中的方法调用最终是走了消息派发机制。

函数派发的方式

静态派发(直接派发)

在编译期编译器就知道了某个函数的实现地址。
优点:高效。
缺点:缺乏动态性,不支持继承,无法实现多态。

动态派发

在运行期,编译器去查找某个函数的实现地址。
动态派发又包含了“函数表”和“消息派发”。

函数表派发

查找类中维护的一个函数表,在函数表中找到某个函数的实现地址。
速度比静态派发慢。

消息派发

OC中的消息机制(runtime中的消息机制)。
具有动态性,可以动态添加方法、动态替换方法的实现、方法转发。
swift中支持了以上所有的派发方式。

Struct、enum(值类型)

静态派发

类class

  1. 普通方法函数表派发
  2. dynamic修饰的方法使用消息派发(@objc修饰的方法只是暴露给了OC)
  3. extension中修饰的方法使用直接派发

NSObject子类

  1. 普通的实例方法使用函数表派发
  2. 对于override的OC方法使用消息派发
  3. dynamic修饰的方法使用消息派发
  4. extension中的普通方法使用直接派发

Protocol

  1. 普通方法使用函数表派发
  2. extension中的普通方法使用直接派发
    协议可以为struct提供多态的支持

别人的图:


image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文:Method Dispatch in Swift作者:Brian King 派发机制是程序判断如何去调用函数...
    Rimson阅读 1,000评论 0 1
  • 介绍 首先全面了解一下,有4种派发机制,而不是两种(静态和动态): 内联(inline) (最快) 静态派发 (S...
    6ffd6634d577阅读 8,067评论 4 128
  • 函数派发机制指的是程序如何找到函数并执行操作的机制。各种各样不同的需求导致不同的函数派发机制。有时可能希望函数直接...
    alvin_wang阅读 1,902评论 0 7
  • 原文地址:Static vs Dynamic Dispatch in Swift: A decisive choi...
    深山问阅读 4,976评论 1 17
  • 此篇博客用来自我学习,来源戴铭大佬的这篇博客 Swift 派发机制 派发目的是让 CPU 知道被调用的函数在哪里。...
    PierceDark阅读 385评论 0 0