和其他数据结构类似, category在runtime也是结构体指针.
struct objc_category {
char *category_name OBJC2_UNAVAILABLE;//扩展名
char *class_name OBJC2_UNAVAILABLE;//类名
struct objc_method_list *instance_methods OBJC2_UNAVAILABLE;//成员方法链表
struct objc_method_list *class_methods OBJC2_UNAVAILABLE;//类方法链表
struct objc_protocol_list *protocols OBJC2_UNAVAILABLE;//协议方法链表
} OBJC2_UNAVAILABLE;
1. objc-runtime的加载入口会加载所有的类,协议,扩展.2. 扩展的所有方法被加载
3. 扩展的方法被倒序加载到类的方法链表中.
参考文章: