Category

Category

原理

  1. category会编译成***_category_t***结构体
1
2
3
4
5
6
7
8
struct _category_t {
const char *name; // 类名
struct _class_t *cls;
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; // 属性
}
  1. 加载category
    1. 通过Runtime加载某个类的所有Category数据

    2. 把所有Category的方法,属性,协议数据,合并到一个大数组中

      (后面参与编译的Category数据,会在数组的前面)

    3. 将合并后的分类数据(方法、属性、协议)插入到类原来的数据前面

Category和Class Extension的区别

Category是运行时,将数据合并到类信息中。Class Extension是编译时就编译到类中。