iOS-底层原理 12:objc_msgSend流程分析之快速查找
iOS 底层原理 文章汇总
本文的主要目的是理解objc_msgSend
的方法查找
流程
在上一篇文章iOS-底层原理 11:objc_class 中 cache 原理分析中,分析了cache的写入流程,在写入流程之前,还有一个cache读取流程,即objc_msgSend
和 cache_getImp
在分析之前,首先了解什么是Runtime
Runtime 介绍
runtime称为运行时,它区别于编译时
运行时
是代码跑起来,被装载到内存中
的过程,如果此时出错,则程序会崩溃,是一个动态
阶段编译时
是源代码翻译成机器能识别的代码
的过程,主要是对语言进行最基本的检查报错,即词法分析、语法分析等,是一个静态
的阶段
runtime
的使用
有以下三种方式,其三种实现方法与编译层和底层的关系如图所示
通过
OC代码
,例如[person sayNB]
通过
NSObject方法
,例如isKindOfClass
通过
Runtime API
,例如class_getInstanceSize
其中的compiler
就是我们了解的编译器
,即LLVM
,例如OC的alloc
对应底层的objc_alloc
, runtime 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流程分析之快速查找相关推荐
- objc_msgSend流程分析之缓存查找
在上一篇文章:objc_class 中 cache 原理分析中,分析了cache的写入流程,在写入流程之前,还有一个cache读取流程,即objc_msgSend 和 cache_getImp 在分析 ...
- iOS底层原理之内存管理
文章目录 定时器 CADisplayLink.NSTimer GCD定时器 内存管理 iOS程序的内存布局 Tagged Pointer OC对象的内存管理 拷贝 引用计数的存储 dealloc 自动 ...
- 视频教程-iOS底层原理班(下)/OC对象/关联对象/多线程/内存管理/性能优化-iOS
iOS底层原理班(下)/OC对象/关联对象/多线程/内存管理/性能优化 小码哥教育CEO,曾开发了2个iOS的流行开源框架(MJRefresh.MJExtension),目前在国内的使用率非常高. 李 ...
- iOS底层原理班(下)/OC对象/关联对象/多线程/内存管理/性能优化-李明杰-专题视频课程...
iOS底层原理班(下)/OC对象/关联对象/多线程/内存管理/性能优化-236人已学习 课程介绍 得遇名师,突飞猛进!iOS培训王者MJ(李明杰)老师精心研发,iOS进阶课程,实用技术 ...
- iOS底层原理探究 第一探. 事件传递和响应者链
一. 声明: 本文意在探讨, 也参考了几位大神的文章, 在最后我会把链接发出来, 如果有理解错误的地方, 请大神们指正哈! 二. 前言: 最近自己做项目的时候, 用到了UITabbarContro ...
- iOS底层原理 - 常驻线程
iOS底层原理 - 常驻线程 在 AFN 2.0 时代,会经常看到 AFN 创建一个常驻线程的方式: 0️⃣ AFN 2.0 时代的常驻线程 + (NSThread *)networkRequestT ...
- iOS底层原理之架构设计
文章目录 何为架构? MVC - Apple版 MVC – 变种 MVP MVVM 设计模式 面试题 何为架构? 架构(Architecture):软件开发中的设计方案,类与类之间的关系.模块与模块之 ...
- html页面源码_整合SpringMVC之错误处理底层原理及源码分析
一. SpringBoot的默认错误处理策略 1. 对404的默认处理策略 我们在发送请求的时候,如果发生了404异常,SpringBoot是怎么处理的呢? 我们可以随便发送一个不存在的请求来验证一下 ...
- Spring Cloud底层原理以及项目实战分析
一.业务场景介绍 二.Spring Cloud核心组件------------------------------------------------------------------------- ...
最新文章
- java if 没有_java – 如何做一个决定没有if语句
- “本地连接”属性中“身份验证”选项卡消失的处理方法
- js之call,apply和bind的模拟实现
- 川大优秀毕业生在GitHub上建了一个项目《深度学习500问》,还未完结就获赞无数
- 吴恩达深度学习笔记10-Course4-Week1【卷积神经网络】
- css文本超出隐藏 显示三个点
- 深圳腾讯java小星星_腾讯自研沙盒手游《手工星球》邀你共赴星派对,来CJ现场一起嗨!...
- decode()、nvl()等用法详解
- matlab分段函数怎么画图_从零开始的matlab学习笔记——(17)其它实用的绘图工具...
- ue html乱码,UE UTF8 乱码
- java泛型为类类型_Java泛型:仅定义为返回类型的通用类型
- 学习笔记——字符串方法整理
- 【综合实训】图书管理系统——详细设计说明书
- mysql update 子表,mysql update 子查询锁表问题
- kettle简单的更新与插入
- multisimbcd码_8421BCD码加法器报告1
- 莫名其妙把电脑机箱左边耳机孔弄出来声音
- Cesium火灾动画(模型动画,粒子特效)
- VMotion and Storage VMotion
- IP 数据库,CSV 和 MDB 格式。
热门文章