首先我们要知道Object对象是分为实例对象(instance),类对象(class)和元对象(meta-class)。
1,实例对象(instance):通过类alloc出来的对象,每次调用alloc都会产生新的instance对象
获取实例对象2,类对象(class):class对象内存中存储的信息:isa指针,superclass指针,属性信息 成员变量(属性,变量名称类型)对象方法信息(-开头的方法),协议信息
获取类对象3,元类对象(meta-class):meta-class对象内存中存储的信息:isa指针,superclass指针,类方法(+方法)
传入类对象会返回原类对象每个实例对象的都有自己的class和meta-class,并且只有一份class和meta-class对象。
一,刚初始化的对象的内存大小是多少呢?其内部结构是怎么样的的呢?
先看一下他内部结构,这是没有成员变量的对象。
实例对象的内部结构从这里可以看出一个对象实际上就是一个结构体,它里面包含了一个isa指针(其实是指向他的类对象),一个指针的大小是8个字节,这里我们是不是就可以认为一个对象的大小是8个字节呢?
但是你调用下面的方法,你会发现是16个字节!
打印对象内存大小可以从两个方面去解释!
1,苹果底层代码有判断当内存小于16个字节会强制让其等于16字节,有兴趣可以去看源码
2,苹果的内存其实分成一块一块的区域,最小的区域就是16字节,当你小于16字节,会直接扔给你一块16字节的内存
其isa指针指向它自己的class对象,isa其实内部也蛮复杂就不在这里细说了。
二,class对象的内部结构
class对象结构
bits: 存储的属性信息 成员变量(属性,变量名称类型)对象方法信息(-开头的方法),协议信息都在
cache: 方法的缓存
suoerclass:指向其父类class类对象的指针
isa: 指向元类对象
三,元类对象的内部结构
元类对象
网友评论