美文网首页
类的结构分析

类的结构分析

作者: 简单的孤寂 | 来源:发表于2020-09-13 22:48 被阅读0次

关于类首先我们都知道我们再创建一个类的时候都会继承与NSObject,那么NSObject中是怎么实现的。我们创建的类和NSObject之间是不是还有其他的东西存在?本文就对此进行一些简单的探索。

类 元类 根元类

·类 类实际上就是一个对象。

·元类 什么是元类?例如LYHPerson类也是一个对象。那么他肯定是有一个类实例化得到的,这个类就是元类。

·根元类 根元类 就是元类实例化得到的。也就是我们所说的NSObject。

探索过程如图所示:

首先我们打印出一个类的x/4gx一个类,可以打印出这个类的内存地址的情况。我们拿到首地址(即类的指针地址),&MASK得出 0x00000001000022e8 这个地址。我们打印这个地址就能得出当前这个类的类名。

然后我们继续对 这个地址进行x/4gx 我们就能得出一个新的内存地址的情况,然后用同样的方法 有打印出了一个LYHPerson 0x00000001000022c0。那么这个LYHPerson就是元类。

我们继续进行操作就能得出0x00000001003340f0 这样一个地址。打印这个地址就能得出NSObject。就证明了NSObject是LYHPerson的根元类。

继承

如果此时我们继承LYHPerson创建一个LYHTeacher,LYHPerson *person;LYHTeacher *teacher,此时person和teacher是没有关系的。只有LYHPerson和LYHTeacher是存在继承关系。那么此时的继承关系就是LYHTeacher继承于LYHPerson,LYHPerson又继承于NSObject,NSObject继承于nil。为什么NSObject继承于nil呢。是因为NSObject就是类的基础,是一个从无到有的过程。

了解了类的整个过程之后 上图我们就能知道上图的整个流程。

类的分析

对于类的分析 首先我们看一张源码的截图,如图所示

图中objc_object 和 objc_class是什么呢?objc_object是我们创建所有对象的根对象,而objc_class是继承于objc_object的,而objc_class包含了我们创建对象的所有信息。怎么印证呢?

首先我们再LYHPerson里面创建一个属性 name如图:

然后我们通过对地址的访问一步步的获取到内容。具体操作如图所示

通过这两张图,最后通过打印*$8我们就得到了LYHPerson中的name属性。这就印证了objc_class里面储存了 我们创建的类的所有信息这句话。

相关文章

  • iOS 类原理探索:类的结构分析

    OC 类原理探索 系列文章 OC 类原理探索:类的结构分析 OC 类原理探索:类结构分析补充[https://ju...

  • 多线程基础(十三):java中的FutureTask

    [toc] FutureTask源码分析 1.类结构及常量、变量 1.1 类结构 FutureTask类结构如下:...

  • iOS类结构:cache_t分析

    一、cache_t 内部结构分析 1.1 在iOS类的结构分析中,我们已经分析过类(Class)的本质是一个结构体...

  • 类,类结构分析

    忙不是不学习的借口 在isa和类的关联[https://www.jianshu.com/p/079a6ad90f1...

  • iOS-OC底层04:类结构分析

    类结构分析 通过lldb来分析类结构 查看objc2的内存情况 类对象只有一份,isa对象-> 类(LGPerso...

  • iOS-底层分析之类的结构分析

    类的结构分析 本文主要分析iOS中的类以及类的结构,下面我们通过一个例子来探索类的结构 我们定义一个WPerson...

  • 类结构分析

    这片文章主要分析的是类的结构以及对象-类-元类-根元类之间的走位. 一. isa的指向以及类之间的关系 准备工作定...

  • 类结构分析

    类结构分析 回顾 前面我们讲了alloc 流程中对象的创建过程,下面我们来探索一下类的结构,废话不多说,开始~ 类...

  • 类结构分析

    开发中经常创建一个 TestClass.h 和 TestClass.m 文件,而这个 TestClass 就是我们...

  • 类的结构分析

    神图镇楼,相信做过iOS开发的同学一定非常熟悉这张经典图,每次看这张图都有不一样的体会,今天我们就借这张图,引出我...

网友评论

      本文标题:类的结构分析

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