OC中的Category(一)

在OC中给一个类添加分类后,程序在编译之后生成的底层结构是struct category_t,里面存储着分类的name(类名)、 instanceMethods(对象方法)、classMethods(类方法)、protocols(属性)、instanceProperties(协议信息)等。
在程序运行的时候,runtime会将Category的数据,合并到类信息中(类对象、元类对象中)

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;
    .
    .
    .
};

分类中的对象方法、类方法、属性、协议信息最后会被合并到结构体class_rw_t的methods(方法列表)、properties(属性列表)、protocols(协议列表)

Category的加载处理过程

  1. 通过Runtime加载某个类的所有Category数据
  2. 把所有Category的方法、属性、协议数据,合并到一个大数组中,后面参与编译的Category数据,会在数组的前面
  3. 将合并后的分类数据(方法、属性、协议),插入到类原来数据的前面

所以在多个分类或原来类中都存在的方法会根据插入方法列表中的顺序调用。一般都是后编译的会插入在方法列表的最前面

通过xcode控制编译的顺序

  • 选中当前的Targets -> Build Phases -> Compile Source
  • 在先后次序添加编译的代码文件

OC类的类信息载入顺序

先在内存中载入原本类信息,在载入分类的类信息

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 30,264评论 8 265
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,675评论 1 32
  • OC语言基础 1.类与对象 类方法 OC的类方法只有2种:静态方法和实例方法两种 在OC中,只要方法声明在@int...
    奇异果好补阅读 4,523评论 0 11
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,213评论 3 119
  • 需求 在调用QQ音乐搜索歌曲api的时候发现返回是一个jsonp 请求url:https://c.y.qq.com...
    TankCJZ阅读 1,474评论 0 1

友情链接更多精彩内容