iOS底层原理---Category原理
Category底层结构

注意点
1.当我们添加分类时,在编译阶段信息都存储在category_t结构体内(有多少个分类即有多少个category_t结构体)
category分类信息如何添加到类信息中的(底层实现的流程)
{
1.runtime运行时即将category_t结构体信息都整合到一起,采用while(i--)(倒序遍历,后参与编译的信息在前面)
PS:此时会出现一个面试点(为什么分类后参与编译的信息会优先调用)
2.runtime将整合的信息合并到类/元类的rw_t中
1)首先rw_t扩容,将原本的方法列表后移
2)分类信息copy到方法类别前面
PS:所以就能解释分类的方法会覆盖类方法
}
延伸:1.分类与扩展的区别
1.扩展:编译时即将信息合并到类/元类方法列表中,即编译时确定
2.分类:编译时才将息合并到类/元类方法列表中
延伸:2.分类可以添加属性吗?可以添加成员变量吗?
分类可以添加属性,但是没有实现成员变量以及set和get方式实现
分类不能添加成员变量
因为category_t底层结构没有成员变量,可以通过关联对象方式添加成员变量
延伸:3.property、synthesize、dynamic关键字的作用
property:声明成员变量、set和get方法,默认实现set和get方法
(其实set和get方法的实现是由synthesize实现的)
dynamic:不用自动实现set和get和成员变量

浙公网安备 33010602011771号