美文网首页
Runtime 整理 (一) 消息发送

Runtime 整理 (一) 消息发送

作者: Leaping_Fish | 来源:发表于2020-02-20 18:10 被阅读0次

OC方法底层调用过程

  1. 实际上是 objc_msgSend函数的调用
  2. objc_msgSend的执行过程大致分成三部分:消息发送 -> 动态方法解析 -> 消息转发

消息发送底层实现原理

image.png

进入ENTRY _objc_msgSend 后 首先判断x0(消息接收者是否为nil), 如果为nil 跳转到 LNilOrTagged 直接 return 如图


image.png

不为nil, 消息接收者 isa指针 通过 and 做与操作 找到 isa 指向的类(LGetIsaDone) 然后从类中的缓存查找(CacheLookup) 如图

image.png
如果命中(CacheHit) 直接返回 imp 如图
image.png
如果未命中(CheckMiss) 调用方法 __objc_msgSend_uncached 如图
image.png
调用 __objc_msgSend_uncached 进入后会调用 MethodTableLookup (从方法列表中查找 imp) 如图
image.png
进入方法后 会跳转 __class_lookupMethodAndLoadCache3 (为C 函数方法, 汇编一C约定在汇编中方法名前多加一个下划线) 方法 如图
image.png
进入__class_lookupMethodAndLoadCache3方法后会调用 lookUpImpOrForward 方法
image.png
retry 会先在缓存中重新查找一次,找到 return imp 回到汇编进行调跳转(找到imp后会先添加到缓存在进行返回)。如果没有找到 会通过指针从父类的缓存、方法列表中查找 for 循环到 根类

初下笔,多包涵。😊

相关文章

  • Runtime 整理 (一) 消息发送

    OC方法底层调用过程 实际上是 objc_msgSend函数的调用 objc_msgSend的执行过程大致分成三部...

  • Runtime——消息转发与运用

    本文主要是针对runtime消息转发进行整理,并举例关于消息转发的运用。 消息转发 1、消息调用 OC中发送消息是...

  • Runtime --- 消息发送

    上篇内容我们主要了解了objc_msgSend方法的几个参数和objc_class的结构本篇内容我们一起了解 消息...

  • runtime消息发送

    一、runtime简介 RunTime简称运行时。OC就是运行时机制,也就是在运行时候的一些机制,其中最主要的是消...

  • Runtime 消息发送

    1、isa 详解 isa 在 arm64 架构之前就是一个普通的指针,存储着 Class、Meta-Class 对...

  • Runtime消息发送

    对象方法的调用就是向这个对象发送消息 objc_method这个结构体的内容: SEL method_name 方...

  • Runtime — 消息发送

    一、Runtime 1. Runtime介绍 Objective-C 是一门动态语言,而承载整个 OC 动态特性的...

  • Runtime-原理

    runtime初探对象与方法的本质runtime-消息发送runtime-动态方法解析runtime-消息转发 r...

  • runtime的消息机制

    任何方法调用本质:发送一个消息,用runtime发送消息,OC底层实现通过runtime实现; 我们平时书写的代码...

  • runtime objc_msgSend使用

    前言 想要通过runtime发送消息,就必须要掌握runtime如何发送消息,是调用哪个函数?又是如何调用的?本篇...

网友评论

      本文标题:Runtime 整理 (一) 消息发送

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