底层结够
在objc-runtime-new文件里
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;
// Fields below this point are not always present on disk.
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);
};
Category的加载处理过程
1.通过runtime加载某个类的所有Category数据
2.把Category的所有属性,方法,协议数据,合并到一个大数组中
后面参与编译的Category数据会在数组前面
3.将合并后的分类数据(方法,属性,协议),插入到类的原来数据前面
网友评论