1. 回顾

iOS底层探索之Runtime(一):运行时&方法的本质
iOS底层探索之Runtime(二): objc_msgSend&汇编快速查找分析

在前面的文章中介绍了消息发送(objc_msgSend)流程,主要是汇编快速查找cache的过程,并对汇编源码进行了分析,本章内容主要分析慢速查找_lookUpImpOrForward流程。

2. _lookUpImpOrForward

在汇编的快速查找没有找到缓存,就会进入__objc_msgSend_uncached,在__objc_msgSend_uncached 里面最主要的是对MethodTableLookup的处理。

2.1 MethodTableLookup

  • x0寄存器里面存的是imp,并赋值给x17x0是第一个寄存器也是返回值的存储位置,如果impx0里面,必将做一件事情,就是返回,那么结果一定是在bl _lookUpImpOrForward执行后的返回值里面,也就是我们要找的imp存储的地方,所以接下来的重点就是_lookUpImpOrForward
  • blb是跳转,l是链接寄存器,将下一条指令的地址保存到lr寄存器中,也就是把(mov x17, x0)的指令地址保存在lr中,当_lookUpImpOrForwar执行完以后,执行lr寄存器中的地址。
  • _lookUpImpOrForward找到imp赋值给x17寄存器

_lookUpImpOrForward在源码里面没有找到汇编的实现,因为_lookUpImpOrForward不是汇编写的,是C++写的,所以去掉下划线就可以搜索

iOS底层探索之Runtime(三): lookUpImpOrForward慢速查找分析相关推荐

  1. iOS之深入解析Runtime的objc_msgSend“慢速查找”底层原理

    CacheLookup 快速查找 objc_msgSend 通过汇编 快速查找方法缓存 ,如果能找到则调用 TailCallCachedImp 直接将方法缓存起来然后进行调用,如果查找不到就跳到 Ch ...

  2. iOS 底层探索 - 消息转发

    一.动态方法解析流程分析 我们在上一章<消息查找>分析到了动态方法解析,为了更好的掌握具体的流程,我们接下来直接进行源码追踪. 我们先来到 _class_resolveMethod 方法, ...

  3. iOS底层探索二(OC 中 alloc 方法 初探)

    前言 相关文章: iOS底层探索一(底层探索方法) iOS底层探索三(内存对齐与calloc分析) iOS底层探索四(isa初探-联合体,位域,内存优化) iOS底层探索五(isa与类的关系) iOS ...

  4. iOS底层探索(二) - 写给小白看的Clang编译过程原理

    iOS底层探索(一) - 从零开始认识Clang与LLVM 写在前面 编译器是属于底层知识,在日常开发中少有涉及,但在我的印象中,越接近底层是越需要编程基本功,也是越复杂的.但要想提升技术却始终绕不开 ...

  5. iOS 底层探索篇 —— KVC 底层原理

    iOS 底层探索篇 -- KVC 底层原理 1. Method Swizzling的坑与应用 1.1 method-swizzling 是什么? 1.2 坑点 坑点1:method-swizzling ...

  6. app启动页数秒加载 代码_iOS 底层探索 - 应用加载

    一.前导知识 以下参考自 WWDC 2016 Optimizing App Startup Time : 1.1 Mach-O Mach-O is a bunch of file types for ...

  7. 【iOS底层】11:消息转发

    一.msgSend消息发送监听 在探索了很多次了lookUpImpOrForward方法中,查找完成后会写入cache 在写入cache中发现有个打印log的操作 我们来看下是否可以通过这个输出到本地 ...

  8. iOS运行时-使用Runtime向Category中添加属性以及运行时介绍

    前言 了解OC的都应该知道,在一般情况下,我们是不能向Category中添加属性的,只能添加方法,但有些情况向,我们确实需要向Category中添加属性,而且很多系统的API也有一些在Category ...

  9. iOS 开发:『Runtime』详解(二)Method Swizzling

    本文用来介绍 iOS 开发中『Runtime』中的黑魔法Method Swizzling. 通过本文,您将了解到: Method Swizzling(动态方法交换)简介 Method Swizzlin ...

  10. iOS底层开发消息发送与转发流程

    iOS底层开发消息转发流程 一,cache缓存读取流程分析 首先我们上一章已经了解到对应的cache_t的数据结构 _bucketsAndMaybeMask:指针类型,存放buckets的首地址 _m ...

最新文章

  1. 字节腾讯阿里罕见联手:发布直播技术新标准,要让手机直播像电视一样丝滑...
  2. libvirt-adabddad
  3. 2017年 1月 15日 指针 学习整理
  4. Git commit your changes or stash them before you can merge
  5. 正则表达式的固化分组
  6. 本地存储之sessionStorage
  7. django调用java_07.手把手教将深度学习利用Django将模型发布成服务供java调用
  8. Windows 下音频数据采集和播放
  9. Jeecg-P3 1.0版本发布,JAVA插件开发框架
  10. Eclipse安装UML 插件
  11. python函数定义及调用-Python函数及变量的定义和使用
  12. SPSS 的安装与概貌-第一章
  13. python控制EnergyPlus方法(linux)
  14. python爬取豆瓣书评排行榜_爬虫:爬取豆瓣读书排行榜
  15. Simon‘s writting 全网最全笔记
  16. mac mini 开发android,Mac mini M1上成功启动Ubuntu
  17. dw打开html不显示表格,利用Dreamweaver处理网页表格方法
  18. 1.22-1.23板卡调试日志
  19. [转载] 怎样应对一般的面试---Star 法则 - towerman
  20. es java 查询为空和非空的数据

热门文章

  1. git遇到的问题解决方案
  2. alter table *** add constraint *** 用法---约束
  3. 移动端实现标题文字的截断
  4. No.0_Team C#
  5. 1854: [Scoi2010]游戏
  6. 在exe运行界面按右键(不用按鼠标右键)
  7. Tests for normality正态分布检验
  8. Head First PHP MySQL(中文版)
  9. (转)JAVA实现Windows拨号、IP切换
  10. Zero Sum chapter 2.3 dfs