OC和Swift运行时简介
Objective-C运行时
- 动态类型(dynamic typing)
- 动态绑定(dynamic binding)
- 动态装载(dynamic loading)
派发方式
- 直接派发(Direct Dispatch)
- 函数表派发(Table Dispatch)
- 消息机制派发(Message Dispatch)
直接派发
- 直接派发时最快的,不止时因为需要调用的指令集会更少,并且编译器还能够有很大的优化空间,例如函数内联等,直接派发也有人称为静态调用
- 然而,对应编程来说直接调用也是最大的局限,而且因为缺乏动态性所以没办法支持继承和多态
函数表派发
消息机制派发
Swift运行时
- 值类型总是会使用直接派发,简单易懂
- 而协议和类的extension都会使用直接派发
- NSObject的extension会使用消息机制进行派发
- NSObject声明作用域里的函数都会使用函数表进行派发
- 协议里声明的,并且带有默认实现的函数会使用函数表进行派发