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和成员变量

 

posted @ 2020-08-05 17:06  银榇  阅读(206)  评论(0)    收藏  举报