- Category的实现原理:
Category编译
之后的底层结构是struct category_t,里面存储着分类的对象方法、类方法、属性、协议信息,在程序运行
时,才会将数据合并到类信息中。
-
以方法列表为例,首先根据分类数量将方法列表数组进行扩容,将原来的方法列表数据放到后面,再将分类的数据拷贝到原来方法列表的位置,所以同样的方法会优先调用分类的方法。
- Category和Class Extension的区别是什么?
Class Extension在编译的时候,它的数据就已经包含在类信息中
Category是在运行时,才会将数据合并到类信息中(类对象、元类对象中) -
在类与分类中调用+ (void)load方法,不是通过消息机制,去类对象中通过isa找到元类对象,遍历类方法列表查找,而是直接通过load方法在内存中的地址进行调用的,不存在分类的load方法覆盖类的方法。
Category
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 什么是类别(Category) Category的使用场合 Category实现原理 +load()和+initi...
- 本文将对category的源码进行比较全面的整理分析,最后结合一些面试题进行总结,希望对读者有所裨益。GitHub...
- 本系列是学习iOS底层原理过程中的记录笔记第三篇,往期目录:探索iOS底层原理开篇——对象本质探索iOS底层原理第...
- 一、Category 本质 我们知道,当调用一个对象的方法时,通过对象的 isa 指针找到类对象,然后在类对象的方...