首页
AI Coding
数据标注
NEW
沸点
课程
直播
活动
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
登录
注册
沉默是金iOS
掘友等级
获得徽章 0
动态
文章
专栏
沸点
收藏集
关注
作品
赞
12
文章 12
沸点 0
赞
12
返回
|
搜索文章
最新
热门
类的扩展和关联对象
分类和类扩展简介 类扩展extension 新建一个类扩展,扩展必须定义在@interface 和 @implementation 之间 利用clang -rewrite-objc main.m -o
类的加载原理(下)
回顾 前面讲到了分类的本质以及rwe什么时候被赋值,在查找rwe赋值过程中,发现一个方法 attachCategories,分类的加载。 attachCategories 我们并不知道,什么时候回调用
类的加载原理(中)
回顾 前面探索到_read_images函数,并查看了类的处理,查看了readClass实际流程,发现并没有加载到ro和rw。 realizeClass的引入 因为主要研究的是类的加载原理,所以跳过中
类的加载原理(上)
_objc_init探索 environ_init()环境变量的打印以及使用 将environ_init源码里面,打印代码拷贝,取消条件限制,打印所有环境变量。 环境变量使用,Edit Scheme-
应用程序加载(下)
回顾 前面整个dyld加载流程,我们通过_dyld_start ->dyldbootstrap::start->dyld::_main ->dyld::initializeMainExecutable
应用程序加载(上)
动态库和静态库 静态库:链接时会被完整的复制到可执行文件中,多次使用就会有多份冗余拷贝,oc通常为.a和.framework文件。 动态库: 链接时不复制,程序运行时由系统动态加载到内存,供程序调用,
消息转发流程
instrumentObjcMessageSends 当objcMsgLogEnabled为true,可以调用logMessageSend函数,打印整个方法调用流程。添加代码 进入tmp文件夹查看打印
动态方法决议
方法查找不到报错原因 慢速查找过程中,如果最终查找不到,会返回一个forward_imp 全局搜索_objc_msgForward_impcache 可以发现最终走到了__objc_forward_h
方法慢速查找流程
lookUpImpOrForward方法 方法的快速查找流程,如果没有找到,最终进入_lookUpImpOrForward方法,进入慢速查找流程 查看lookUpImpOrForward函数 是否注册
方法快速查找流程
_objc_msgSend函数 _objc_msgSend汇编代码 cmp p0, #0判断p0-第一个参数是否为空,如为空进入2,否则进入3 判断SUPPORT_TAGGED_POINTERS是否为
下一页
个人成就
文章被点赞
38
文章被阅读
7,851
掘力值
434
关注了
4
关注者
9
收藏集
1
关注标签
1
加入于
2021-06-05