Category分类

2020-04-13  本文已影响0人  大鹅ne

底层结够
在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.将合并后的分类数据(方法,属性,协议),插入到类的原来数据前面

上一篇下一篇

猜你喜欢

热点阅读