44 Swift和Objective-C的运行时简介

OC和Swift运行时简介

Objective-C运行时

  • 动态类型(dynamic typing)
  • 动态绑定(dynamic binding)
  • 动态装载(dynamic loading)
image-20230315223847787.png
image-20230315223918734.png

派发方式

  • 直接派发(Direct Dispatch)
  • 函数表派发(Table Dispatch)
  • 消息机制派发(Message Dispatch)

直接派发

  • 直接派发时最快的,不止时因为需要调用的指令集会更少,并且编译器还能够有很大的优化空间,例如函数内联等,直接派发也有人称为静态调用
  • 然而,对应编程来说直接调用也是最大的局限,而且因为缺乏动态性所以没办法支持继承和多态

函数表派发

image-20230315224412584.png
image-20230315224447729.png
image-20230315224518815.png

消息机制派发

image-20230315224556099.png
image-20230315224627508.png

Swift运行时

image-20230315224655008.png
image-20230315224752370.png
  • 值类型总是会使用直接派发,简单易懂
  • 而协议和类的extension都会使用直接派发
  • NSObject的extension会使用消息机制进行派发
  • NSObject声明作用域里的函数都会使用函数表进行派发
  • 协议里声明的,并且带有默认实现的函数会使用函数表进行派发
image-20230315225032522.png

Swift运行时-final @objc

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

推荐阅读更多精彩内容