OC对象的本质(原理)

作者: 春风依旧 | 来源:发表于2018-07-06 20:31 被阅读40次

一个NSObject对象占用多少内存?

        NSObjcet实际上是只有一个名为isa的指针的结构体,因此占用一个指针变量所占用的内存空间大小,如果64bit占用8个字节,如果32bit占用4个字节

OC的类信息存放在哪里?

一、OC对象及信息的储存
1、instance对象(实例对象):
        instance对象可以有多个,并且分别占据着两块不同的内存,instance对象在内存中存储的信息包括:
①、isa指针
②、其他成员变量
2、class对象(类对象)
每一个类在内存中有且只有一个class对象,class对象在内存中储存的信息主要包括:
①、isa指针
②、superclass指针
③、类的属性信息(@property),类的成员变量信息(ivar)
④、类的对象方法信息(instance method),类的协议信息(protocol)

成员变量的值是储存在实例对象中的,因为只有当我们创建实例对象的时候才为成员变量赋值;但是成员变量叫什么名字,是什么类型,只需要一份就可以了。所以储存在class对象中

3、meta-class(元类对象 )
每个类在内存中有且只有一个元类对象;元类对象和类对象的内存结构是一样的,但是用途不一样,在内存中储存的信息主要包括:
①、isa指针
②、superclass指针
③、类的类方法的信息(class method)

meta-class对象和class对象的内存结构是一样的,所以meta-class中也有类的属性信息,类的对象方法信息等成员变量,但是其中的值可能是空的

成员变量的具体值存放在instance对象。对象方法,协议,属性,成员变量信息存放在class对象。类方法信息存放在meta-class对象

对象的isa指针指向哪里?

1、当对象调用实例方法的时候
        instance的isa指向class,当调用对象方法时,通过instance对象的isa找到class对象,最后找到对象方法的实现进行调用
2、当类对象调用类方法的时候
        类方法是存储在meta-class元类对象中的。那么要找到类方法,就需要找到meta-class元类对象,而class类对象的isa指针就指向元类对象


isa指针指向示意图.png

3、当对象调用其父类对象方法的时候
        当Student的instance对象要调用Person的对象方法时,会先通过isa找到Student的class,然后通过superclass找到Person的class,最后找到对象方法的实现进行调用,同样如果Person发现自己没有响应的对象方法,又会通过Person的superclass指针找到NSObject的class对象,去寻找响应的方法


isa指针指向示意图.png
4、当类对象调用父类的类方法时
        当Student的class要调用Person的类方法时,会先通过isa找到Student的meta-class,然后通过superclass找到Person的meta-class,最后找到类方法的实现进行调用

instance对象的isa指针指向class对象,class对象的isa指针指向meta-class对象,meta-class对象的isa指针指向基类的meta-class对象,基类自己的isa指针也指向自己。

相关文章

  • OC 与 Swift

    OC对象的本质(上):OC对象的底层实现原理OC对象的本质(中):OC对象的种类OC对象的本质(下):详解isa&...

  • OC对象的本质(中)—— OC对象的种类

    OC对象的本质(上):OC对象的底层实现原理OC对象的本质(中):OC对象的种类OC对象的本质(下):详解isa&...

  • OC对象的本质(下)—— 详解isa&supercl

    OC对象的本质(上):OC对象的底层实现原理OC对象的本质(中):OC对象的种类OC对象的本质(下):详解isa&...

  • iOS底层原理总结-- KVO/KVC的本质

    iOS底层原理总结--OC对象的本质(一) - 掘金 iOS底层原理总结--OC对象的本质(二) - 掘金 iOS...

  • 探寻block的本质

    转自:探寻block的本质拓展:探寻OC对象的本质iOS底层原理总结 - 关联对象实现原理iOS底层原理总结 - ...

  • 探寻OC对象的本质

    iOS底层原理总结 - 探寻OC对象的本质 面试题:一个NSObject对象占用多少内存? 探寻OC对象的本质,我...

  • 七.Block初识

    block的原理是什么?本质是什么?本质是OC对象,block封装了函数调用以及函数调用环境的OC对象 __blo...

  • iOS底层原理总结 - Class的本质↑

    通过对面试题的分析探索问题的本质内容 iOS底层原理总结 - OC对象的分类↑iOS底层原理总结 - OC对象的本...

  • block详解

    18:block的原理是怎样的?本质是什么? 封装了函数调用以及调用环境的oc对象 block本质也是一个oc对象...

  • iOS底层原理探索—class的本质

    探索底层原理,积累从点滴做起。大家好,我是Mars。上文iOS底层原理探索—OC对象的本质中总结了OC对象的底层原...

网友评论

    本文标题:OC对象的本质(原理)

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