美文网首页
iOS笔记-runtime

iOS笔记-runtime

作者: lmao94 | 来源:发表于2022-05-05 09:29 被阅读0次

runtime概念:

Objective-C是基于C的,为C添加了面向对象的特性。将很多静态语言在编译和链接时期做的事情放到了runtime运行时来处理,可以说runtime是Objective-C幕后工作者

runtime(简称运行时),是一套纯C(C和汇编写的)的API。而OC就是运行时机制,也就是在运行时候的一些机制,其中最主要的是消息机制。

C语言中,函数的调用在编译的时候回决定调用哪个函数。

OC语言中,函数调用称为消息发送,属于动态调用过程。在编译的时候并不能决定真正调用哪个函数,只有在真正运行的时候才会根据函数的名称找到对应的函数来调用。

事实证明:在编译阶段,OC可以调用任何函数,即使这个函数并未实现,只要声明过就不会报错,只有当运行的时候才会报错,这是因为OC是运行时动态调用的。而C语言调用未实现的函数就会报错。

runtime消息机制

原理:对象根据方法编号SEL去映射表查找对应的方法实现。
\color{red}{每一个OC的方法,底层必然有一个与之对应的runtime方法}

消息机制方法调用流程

  1. OC在向一个对象发送消息时,runtime库会根据对象的isa指针找到该对象对应的类或其父类中查找方法
  2. 注册方法编号(这里用方法编号的好处,可以快速查找)
  3. 根据方法编号去查找对应方法
  4. 找到最终函数实现地址,根据地址去方法区调用对应函数

\color{red}{补充:}每个对象内部都有一个isa指针,这个指针是指向它的真实类型,根据这个指针就能知道调用的是哪个类的方法

runtime常见作用

  • 动态交换两个方法的实现
  • 动态添加属性
  • 实现字典转模型的自动转换
  • 动态添加方法
  • 拦截并替换方法

相关文章

网友评论

      本文标题:iOS笔记-runtime

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