通过案例验证了类和对象进行关联是通过isa
来进行的,在案例中对isa
取ISA_MASK
就可以得出类的地址,由于isa
默认是nonPointerIsa
,而非纯的isa
指针数据是存储在bits
里面的,在64
位的地址段里不止存储了类的地址信息,还存储类别的和类相关的信息,而ISA_MASK
的作用就是在64
位的地址段里取isa
关联的类,可能这个ISA_MASK
不够形象接下来通过下面的案例从isa
推导class
由于当前测试的是MAC
系统因此位域查看的是x86_64
架构的,可以发现类信息shiftcls
占用44
位,要想得到shiftcls
得通过下面三步
- 右移
3
位 - 左移
20
位 - 右移
17
位
通过nonPointerIsa
地址的平移,得到的shiftcls
地址和类的地址是一模一样的,这也验证了关联类和对象的是isa