iOS开发底层之类的底层探究-05


一、探索类

1.通过实操观察类的结构

在这里插入图片描述
下面就一张经典的图,详细表明了实例对象、类、元类、根元类之间的联系。
isa的走位图
isa的元类继承链 在这里插入图片描述
苹果官方isa图,包含了所有isa走位情况:
在这里插入图片描述
结论:

  1. isa的走位: 对象isa -> 类isa -> 元类isa -> 根元类isa ->根元类。
  2. 根类isa走位: 根类isa -> 根元类isa
  3. 继承类isa走位:对象isa -> 类isa ->父类isa -> 父类元类isa -> 根元类isa ->根元类。
  4. NSObject是所有对象的根元类,他没有父类。

2. objc_class 探索 - 属性的本质

  1. 查找objc_class的源码,在objc源码中查询。
    在这里插入图片描述

  2. 获取内存数据 bits。
    1.获得类地址,平移步长 ,得到bits。
    首先我们知道objc_class的内部结构有:
    superClass , cache , 然后就是bits, 所以我们要bits之前的成员变量的大小, superClass = 8字节,重点要计算下 chche_t 的大小。 后续补充。
    在首地址平移0x20就可以得到bits的地址。 看操作截图
    在这里插入图片描述

  3. 看到上面的截图还不够,我们最终是需要拿到LGPerson里面的属性 name ,继续看操作。
    在这里插入图片描述

  4. 多个属性获取方式,内存平移,或者通过数组下标方式访问。 (接上面操作)
    在这里插入图片描述

3. objc_class 探索 - 方法的本质

  1. 有了上面获取属性的操作,下面来实现获取方法

在这里插入图片描述

  1. 探索下class_rw_t中的== ro()==方法,找寻成员变量
    2.1 看下ro()下的ivars方法。
    在这里插入图片描述
    成员变量就藏在ivars里面。 上图是因为程序没有重新运行,所以没有打印出来。

二. 遗留问题?

  1. 类方法在哪儿?
    类的底层详解2有解答
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值