iOS 底层原理 文章汇总

本文的主要目的是理解objc_msgSend方法查找流程

在上一篇文章iOS-底层原理 11:objc_class 中 cache 原理分析中,分析了cache的写入流程,在写入流程之前,还有一个cache读取流程,即objc_msgSendcache_getImp

在分析之前,首先了解什么是Runtime

Runtime 介绍

runtime称为运行时,它区别于编译时

  • 运行时代码跑起来,被装载到内存中的过程,如果此时出错,则程序会崩溃,是一个动态阶段

  • 编译时源代码翻译成机器能识别的代码的过程,主要是对语言进行最基本的检查报错,即词法分析、语法分析等,是一个静态的阶段

runtime使用有以下三种方式,其三种实现方法与编译层和底层的关系如图所示

  • 通过OC代码,例如 [person sayNB]

  • 通过NSObject方法,例如isKindOfClass

  • 通过Runtime API,例如class_getInstanceSize


其中的compiler就是我们了解的编译器,即LLVM,例如OC的alloc 对应底层的objc_allocruntime system libarary 就是底层库

探索方法的本质

方法的本质

在iOS-底层原理 07:isa与类关联的原理文章中,通过clang编译的源码,理解了OC对象的本质,同样的,使用clang编译main.cpp文件,通过查看main函数中方法调用的实现,如下所示

//main.m中方法的调用
LGPerson *person = [LGPerson alloc];
[person sayNB];
[person sayHello];//												

iOS-底层原理 12:objc_msgSend流程分析之快速查找相关推荐

  1. objc_msgSend流程分析之缓存查找

    在上一篇文章:objc_class 中 cache 原理分析中,分析了cache的写入流程,在写入流程之前,还有一个cache读取流程,即objc_msgSend 和 cache_getImp 在分析 ...

  2. iOS底层原理之内存管理

    文章目录 定时器 CADisplayLink.NSTimer GCD定时器 内存管理 iOS程序的内存布局 Tagged Pointer OC对象的内存管理 拷贝 引用计数的存储 dealloc 自动 ...

  3. 视频教程-iOS底层原理班(下)/OC对象/关联对象/多线程/内存管理/性能优化-iOS

    iOS底层原理班(下)/OC对象/关联对象/多线程/内存管理/性能优化 小码哥教育CEO,曾开发了2个iOS的流行开源框架(MJRefresh.MJExtension),目前在国内的使用率非常高. 李 ...

  4. iOS底层原理班(下)/OC对象/关联对象/多线程/内存管理/性能优化-李明杰-专题视频课程...

    iOS底层原理班(下)/OC对象/关联对象/多线程/内存管理/性能优化-236人已学习 课程介绍         得遇名师,突飞猛进!iOS培训王者MJ(李明杰)老师精心研发,iOS进阶课程,实用技术 ...

  5. iOS底层原理探究 第一探. 事件传递和响应者链

    一. 声明:  本文意在探讨, 也参考了几位大神的文章, 在最后我会把链接发出来, 如果有理解错误的地方, 请大神们指正哈! 二. 前言:  最近自己做项目的时候, 用到了UITabbarContro ...

  6. iOS底层原理 - 常驻线程

    iOS底层原理 - 常驻线程 在 AFN 2.0 时代,会经常看到 AFN 创建一个常驻线程的方式: 0️⃣ AFN 2.0 时代的常驻线程 + (NSThread *)networkRequestT ...

  7. iOS底层原理之架构设计

    文章目录 何为架构? MVC - Apple版 MVC – 变种 MVP MVVM 设计模式 面试题 何为架构? 架构(Architecture):软件开发中的设计方案,类与类之间的关系.模块与模块之 ...

  8. html页面源码_整合SpringMVC之错误处理底层原理及源码分析

    一. SpringBoot的默认错误处理策略 1. 对404的默认处理策略 我们在发送请求的时候,如果发生了404异常,SpringBoot是怎么处理的呢? 我们可以随便发送一个不存在的请求来验证一下 ...

  9. Spring Cloud底层原理以及项目实战分析

    一.业务场景介绍 二.Spring Cloud核心组件------------------------------------------------------------------------- ...

最新文章

  1. java if 没有_java – 如何做一个决定没有if语句
  2. “本地连接”属性中“身份验证”选项卡消失的处理方法
  3. js之call,apply和bind的模拟实现
  4. 川大优秀毕业生在GitHub上建了一个项目《深度学习500问》,还未完结就获赞无数
  5. 吴恩达深度学习笔记10-Course4-Week1【卷积神经网络】
  6. css文本超出隐藏 显示三个点
  7. 深圳腾讯java小星星_腾讯自研沙盒手游《手工星球》邀你共赴星派对,来CJ现场一起嗨!...
  8. decode()、nvl()等用法详解
  9. matlab分段函数怎么画图_从零开始的matlab学习笔记——(17)其它实用的绘图工具...
  10. ue html乱码,UE UTF8 乱码
  11. java泛型为类类型_Java泛型:仅定义为返回类型的通用类型
  12. 学习笔记——字符串方法整理
  13. 【综合实训】图书管理系统——详细设计说明书
  14. mysql update 子表,mysql update 子查询锁表问题
  15. kettle简单的更新与插入
  16. multisimbcd码_8421BCD码加法器报告1
  17. 莫名其妙把电脑机箱左边耳机孔弄出来声音
  18. Cesium火灾动画(模型动画,粒子特效)
  19. VMotion and Storage VMotion
  20. IP 数据库,CSV 和 MDB 格式。

热门文章

  1. Verilog——补码转换
  2. 野火STM32F103指南者笔记1.寄存器点亮LED
  3. odin靶机(exiftooly隐写工具)
  4. 我在VsCode上看基金,你呢?
  5. vscode:格式化json
  6. Linux下4G模块高新兴物联中兴ME3630拨号上网
  7. amtisy带你暴炒基金Action-Two:选基金
  8. //过360云查杀的代码
  9. Android收起虚拟键盘
  10. mongoDB数据建模