分类的底层结构体 编译完毕之后
编译完毕的时候 一开始程序运行的时候 所有分类的方法 一开始都存放在 结构体中(每一个分类都有一个新的结构体对象),
编译完毕之后 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
iOS底层原理
最新推荐文章于 2023-06-01 22:28:58 发布