iOS底层原理

分类的底层结构体 编译完毕之后
编译完毕的时候 一开始程序运行的时候 所有分类的方法 一开始都存放在 结构体中(每一个分类都有一个新的结构体对象),
编译完毕之后 category存放在 结构体category_t中 并没有合并到 原始类中 每一个分类都会生成catrgory_t的结构体, 在运行时的时候才会将分类中的方法、协议、属性等 合并到原始的类中去。
下面是源码观看的过程在每一步都给出了注释, 有点枯燥,但是看完之后会很受益。
分类代码 C\C++源码分析
利用:
xcrun -sdk iphoneos clang -arch arm64 - OC源文件 -o 输出的CPP文件
复制代码命令可以查看转化为C\C++代码。会有生成一个, mj,xxx.cpp的文件就是我们想要的文件
可以将其拖入到xcode中, 方便搜索
接下来直接搜索 category_t 得出如下结构体 我已经将注释放在后面了
struct _category_t{
const char *name; ///> 分类的名字
struct _class_t *cls; ///> class
const struct _method_list_t *instance_methods; ///> 实例方法列表
const struct _method_list_t *class_methods; ///> 类方法列表
const struct _protocol_list_t *protocols; ///> 协议
const struct _prop_list_t *properties; ///> 属性
}
复制代码每创建一个类都会 根会根据如下方法创建一个category_t的结构体
static struct category_t OBJC

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值