Categoty 底层结构
在objc-runtime-new.h中有定义
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 
 | struct category_t {const char *name;
 classref_t cls;
 struct method_list_t *instanceMethods;
 struct method_list_t *classMethods;
 struct protocol_list_t *protocols;
 struct property_list_t *instanceProperties;
 
 struct property_list_t *_classProperties;
 
 method_list_t *methodsForMeta(bool isMeta) {
 if (isMeta) return classMethods;
 else return instanceMethods;
 }
 
 property_list_t *propertiesForMeta(bool isMeta, struct header_info *hi);
 };
 
 | 
Categoty 加载顺序
- 通过Runtime加载类的所有分类;
- 把所有分类的方法、属性、协议 合并到一个大数组中;
- 后参与编译的分类数据会在数组的前面;
- 也就是说后参与编译的分类数据会覆盖先编译的相同的的数据,如:相同的方法;
 
- 将合并后的分类数据(方法、属性、协议),插入到类原来的数据的前面;
- 这也就造成了分类中的方法会覆盖掉类中的相同的方法;
 
