首页
首页
沸点
课程
直播
活动
竞赛
商城
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
iOS底层原理解析
来自总部的人
创建于2021-06-23
订阅专栏
分析iOS runtime相关的
暂无订阅
共12篇文章
创建于2021-06-23
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
12.应用程序加载
一、dyld的引出 1.首先在main函数打断点,可以看到在main之前libdyld.dylib`start 2.在load函数打断点,通过堆栈信息可以看到dyld做了大量的工作 3.dyld可以从
11.消息转发
一、消息转发流程 1.查看方法未实现的时候调用的log 在路径 /tmp/ 下可以看到msgSends-XXX的文本 如果msgSends-XXX文件没有内容的话,注释掉logMessageSend函
10.消息动态决议
一、方法找不到的底层报错原理 1.在lookUpImpOrForward中第一行代码中默认的指针_objc_msgForward_impcache 2.全局搜索_objc_msgForward_imp
9.消息慢速查找
一、汇编缓存找不到 CacheHit找不到会执行MissLabelDynamic CacheLookup NORMAL, _objc_msgSend, __objc_msgSend_uncached
8.objc_msgSend下
一、问题回顾 当调用一次函数之后_maybeMask,按道理来说不应该是3吗?为什么_maybeMask=7? 方式1:当插入函数的时候cache会调用insert函数,所以在insert函数中打印
7.objc_msgSend
一、objc_msgSend流程 1.查看方法的本质,生成cpp文件,命令 xcrun -sdk iphonesimulator clang -arch arm64 -rewrite-objc mai
6.类的cache_t分析
一、cache的数据结构 cache_t的源码 通过猜测加分析可知cache_t主要通过操作bucket_t来实现缓存 bucket_t的源码 果然,一切都是bucket_t 二、cache底层LLD
5.类的原理分析(下)
一、类的内存的ro数据 LGPerson类的定义 打印ro的过程(.ro()函数如果不知道的话,可以去底层源码看下,在class_rw_t结构体中) 可以看到ivars中存储所有的成员变量,在底层中属
4.类的原理分析
一、isa走位图和继承链 先来个经典的图,不熟悉的可以先看下 1.用代码去证明 通过地址可以看到NSObject的isa的指向是和上图中的一样的,并且isa也是有继承关系的 2.通过控制台打印 解释下
3.isa指针
一、对象的本质 1.OC类怎么编译成c++文件 clang -rewrite-objc main.m -o main.cpp 把目标文件编译成c++文件 UIKit报错问题 clang -rewrit
2.结构体内存对齐
一、内存对齐原则 1.引子 这三个函数打印出来的大小为啥不一样?这是因为内存对齐影响的 sizeof:计算类型所占的内存大小 class_getInstanceSize:计算对象实际占用的内存大小,规
1.alloc底层探究
嘘,别说话,吻我(开搞) 一、起因 从一段代码说起 结果: 3个不同的指针(地址相差8个字节)指向同一块内存区域 注:%@-obj1 打印对象的类型以及内存地址 %p-obj1 打印对象的内存地址 %