美文网首页
类底层原理

类底层原理

作者: Ray_lawq | 来源:发表于2019-02-22 13:52 被阅读0次

首先照常先来一发代码

结果是地址一样的!!!why?类在哪里?其实类在内存里面只会存在一份!

那么这样呢?得到的是什么?

其实cls4 是原类。他们的逻辑其实是:
类初始化出一个实例对象p,而原类实例化出一个类对象(原类是由系统管理,系统去初始化)
那么原类的上边又是什么呢?叫根原类,根原类是他自己,如图

isa 指针底层来看是一个联合体

联合体(节省消耗)
在进行某些算法的C语言编程的时候,需要使几种不同类型的变量存放到同一段内存单元中。也就是使用覆盖技术,几个变量互相覆盖。这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作“共用体”类型结构,简称共用体,也叫联合体。

而isa 指针指向 对象 -> 类 -> 原类 -> 根原类
父类的指向是 对象 -> 父类 -> objc -> nil ;其中根原类的父类为objc,如图:

例:

  1. person 的父类是obj ,他的isa 指向 原类 -> 根原类 -> 循环; 原类的父类是根原类,根原类的父类是obj,obj的父类是nil。
  2. objc 的父类是nil ,它的isa指向 根原类 -> 根原类循环; 根原类的父类是objc。

查看class 源码可以知道包括以下主要的内容

上图可以看出,ivar(变量)是保存在ro(只读)里边的,所以当类创建成功以后,没有办法修改(也就是没有办法动态的修改类的变量),但是可以动态的修改属性(属性列表数组保存在rw里边)。

所以addivar 方法必须在registerClassPair 方法以前调用,否则无法添加进去

类的type:

oc的类信息存放在哪里?

成员变量的具体值,存放在instance对象中

对象方法、属性、成员变量、协议相关的信息,存放在class对象中

类方法存放在meta_class对象中

(这里为什么成员变量的值存放在instance对象中,而信息放在class对象中;是因为值可以多分 ,不同实例对象有不同的属性值,而属性信息只需要一份存放在class对象中就可以了)

代码验证一下, 成员变量保存在实例对象里边,详见下图:

可以看到textObj1 系统给他分配了48 而 textObj 只是给分配了16

代码验证一下, 对象方法保存在类里边;类方法保存在原类里边,详见下图:

参考:https://blog.csdn.net/he3602728/article/details/108088541

这篇博客里边介绍的各种类的关键字也非常不错,记录一下:https://www.jianshu.com/p/b210c9b339fa

相关文章

  • 类底层原理

    首先照常先来一发代码 结果是地址一样的!!!why?类在哪里?其实类在内存里面只会存在一份! 那么这样呢?得到的是...

  • 2018-08-08

    java集合类的底层实现 LinkedList底层实现和原理 LinkedList类是List接口的实现类,它是一...

  • iOS-底层原理17:类扩展 与 关联对象 底层原理探索

    本文的主要目的是针对类的加载的一个扩展,主要讲讲类扩展和分类的底层实现原理 1. 类扩展底层原理探索 1.1 类扩...

  • 2020-08-10 Map接口

    一、Map类的实现结构 1.HashMap HashMap底层原理: HashMap底层原理 JDK8的更新: H...

  • 100篇技术文章

    1.Class类的底层实现原理 - 链接 链接 2.Category分类的底层实现原理 - 链接 3.Block块...

  • Today面试

    Runloop 底层原理Kvo 底层原理ARC 底层原理 如何实现GCD 底层原理Block 底层原理Aut...

  • iOS-分类重写原类方法时,如何调用原类方法

    目录 原理原理验证一(表面验证)原理验证二 (使用 runtime)原理验证三(底层验证)如何调用原类方法 一 原...

  • iOS底层原理--类的结构分析(二)

    在前面一篇文章iOS底层原理--类的结构分析中,我们已经对类的底层原理进行了分析。得出了以下结论: 对象的isa指...

  • 2018-08-08

    Java集合类的底层实现 Vector底层实现和原理 Vector作为List的另外一个典型实现类,完全支持Lis...

  • 2018-08-08

    集合类的底层实现原理 1、ArrayList底层实现和原理 首先了解线性表、数组的概念。 线性表:最基本、最简单、...

网友评论

      本文标题:类底层原理

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