swift中函数派发机制

2021-05-14  本文已影响0人  梁森的简书

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
上一篇 下一篇

猜你喜欢

热点阅读