文章目录
通过isa、superclass指针指向中,我们知道了,isa
、superclass
的作用,接下来继续详细了探寻下Class
结构其他成员变量的作用。Class
的底层结构图如下图:
1、bits
类信息
1.1、class_rw_t
结构
class_rw_t
结构通过 bits 变量与 FAST_DATA_MASK 的位&运算
,获取到:
class_rw_t* data() {
return (class_rw_t *)(bits & FAST_DATA_MASK);
}
class_rw_t里面的methods、properties、protocols是二维数组,是可读可写的,包含了类的初始内容、分类的内容
1.2、class_ro_t
结构
class_ro_t
里面的baseMethodList
、baseProtocols
、ivars
、baseProperties
是一维数组,是只读的,包含了类的初始内容
1.3、method_t
结构
method_t
是对方法\函数的封装
1、IMP
代表函数的具体实现
2、SEL
代表方法\函数名,一般叫做选择器,底层结构跟char *
类似
可以通过@selector()
和sel_registerName()
获得。
可以通过sel_getName()
和NSStringFromSelector()
转成字符串。
不同类中相同名字的方法,所对应的方法选择器是相同的
3、types
包含了函数返回值、参数编码的字符串
Type Encoding:
iOS中提供了一个叫做@encode
的指令,可以将具体的类型表示成字符串编码
2、cache_t
方法缓存列表
Class内部结构中有个方法缓存(cache_t),用散列表(哈希表)来缓存曾经调用过的方法,可以提高方法的查找速度。
哈希表:本质是用空间换时间,在iOS中采用位&运算来取值赋值。