isa推导class

通过案例验证了类和对象进行关联是通过isa来进行的,在案例中对isaISA_MASK就可以得出类的地址,由于isa默认是nonPointerIsa,而非纯的isa指针数据是存储在bits里面的,在64位的地址段里不止存储了类的地址信息,还存储类别的和类相关的信息,而ISA_MASK的作用就是在64位的地址段里取isa关联的类,可能这个ISA_MASK不够形象接下来通过下面的案例从isa推导class

由于当前测试的是MAC系统因此位域查看的是x86_64架构的,可以发现类信息shiftcls占用44位,要想得到shiftcls得通过下面三步

  1. 右移3
  2. 左移20
  3. 右移17
    通过nonPointerIsa地址的平移,得到的shiftcls地址和类的地址是一模一样的,这也验证了关联类和对象的是isa

你可能感兴趣的:(isa推导class)