- Category的实现原理:
Category编译之后的底层结构是struct category_t,里面存储着分类的对象方法、类方法、属性、协议信息,在程序运行时,才会将数据合并到类信息中。
category的底层结构.png -
以方法列表为例,首先根据分类数量将方法列表数组进行扩容,将原来的方法列表数据放到后面,再将分类的数据拷贝到原来方法列表的位置,所以同样的方法会优先调用分类的方法。
Category的加载处理过程.png - Category和Class Extension的区别是什么?
Class Extension在编译的时候,它的数据就已经包含在类信息中
Category是在运行时,才会将数据合并到类信息中(类对象、元类对象中) -
在类与分类中调用+ (void)load方法,不是通过消息机制,去类对象中通过isa找到元类对象,遍历类方法列表查找,而是直接通过load方法在内存中的地址进行调用的,不存在分类的load方法覆盖类的方法。
load方法.png
+initialize方法.png
Category
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 什么是类别(Category) Category的使用场合 Category实现原理 +load()和+initi...
- 本文将对category的源码进行比较全面的整理分析,最后结合一些面试题进行总结,希望对读者有所裨益。GitHub...
- 本系列是学习iOS底层原理过程中的记录笔记第三篇,往期目录:探索iOS底层原理开篇——对象本质探索iOS底层原理第...
- 一、Category 本质 我们知道,当调用一个对象的方法时,通过对象的 isa 指针找到类对象,然后在类对象的方...



