11期_iOS-分类探究

2023-08-11  本文已影响0人  萧修

分类概念

分类的特点:

多个分类编译顺序(队列方式):Build Phases -> Compil Sources 列表中下面的Category文件比其上边的Category文件先加载运行
分类中的instance方法合并到class对象中,类方法合并到meta-class对象中
属性、instance方法、协议合并到类对象struct class_rw_t中
通过attachCategories函数将合并后的分类数据(方法、属性、协议),插入到类原来数据的前面

initialize和load区别
load是启动加载时刻runtime调用,
1、调用顺序:load是函数地址调用,initialize是objc_msgsend调用;都是系统主动调用
2、分类加载load方法,原类也会加载,先编译优先加载(只加载一次)。而initialize子类调用 再调用父类,父类会调用多次

分类的底层结构

struct category_t{
const char *name;//分类名称
classref_t cls;//所属原类
struct method_list_t *instanceMethods;//实例方法列表
struct method_list_t *classMethods;//类方法列表
struct property_list_t *protocols;//协议方法列表
struct property_list_t *instanceProperties;//实例属性列表
    
}

上一篇下一篇

猜你喜欢

热点阅读