美文网首页
Object底层原理一:对象的本质

Object底层原理一:对象的本质

作者: flyinskybiu | 来源:发表于2020-04-23 17:05 被阅读0次

    首先我们要知道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: 指向元类对象

    三,元类对象的内部结构

    元类对象

    元类对象和类对象的结构是一样的,只是它只存储着类方法。

    superclass:指向其父类元类对象的指针

    isa :指向基类的元类对象


    由此可见对象的的调用轨迹可从下图的得知。

    相关文章

      网友评论

          本文标题:Object底层原理一:对象的本质

          本文链接:https://www.haomeiwen.com/subject/wgyaihtx.html