OC对象的本质

对象的本质

OC对象的本质是结构体,结构体内部是一个指针;
结构体.png

1、引申:一个OC对象最少占用几个字节?

  • 一个指针占用8个字节,但是Foundation 框架硬性规定:分配内存时,一个对象最少会分配16个字节;
  • 函数:malloc_size ()(allocwithZone—createInstanceFromZone— cls->instanceSize。 一旦发现分配内存小于16,就把它变成16.)
  • 遵循内存对其原则,分配的内存都为16的倍数。
对象:

iOS对象分为实例对象、类对象、元类对象。

1、实例对象:

  • isa指针;
  • 成员变量具体的值;

2、类对象:

  • isa指针;
  • superclass 指针;
  • 对象方法;
  • 协议;
  • 属性;
  • 成员变量;

3、元类对象:

  • isa指针;
  • superclass 指针;
  • 类方法;
isa与superclass

1、实例对象的isa指向类对象;类对象的isa指向元类对象;

  • 当调用实例方法时:实例对象通过isa找到类对象,调用类对象里的实例方法;
  • 调用类方法时同理。

2、类对象的superclass指向父类;

  • 当调用父类的实例方法时:实例对象通过isa找到类对象;类对象通过superclass找到父类,进而找到父类里的实例对象方法;
  • 调用父类的类方法同理。

类对象的结构
  • class、meta-class对象的本质结构都是struct objc_class
  • 源码

类对象的结构.png

  • class_rw_t里面的methods、properties、protocols是二维数组,是可读可写的,包含了类的初始内容、分类的内容;
  • class_ro_t里面的baseMethodList、baseProtocols、ivars、baseProperties是一维数组,是只读的,包含了类的初始内容;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值