美文网首页
类的结构分析

类的结构分析

作者: MrDemon_ | 来源:发表于2020-09-19 11:30 被阅读0次

类结构分析图

类结构分析图

这里直接上图会比较清晰一些,源码的追踪过程这里就不赘述了。主要追踪关键方法objc_class : objc_object

struct objc_class : objc_object {
    // Class ISA;
    Class superclass;
    cache_t cache;             // formerly cache pointer and vtable
    class_data_bits_t bits;    // class_rw_t * plus custom rr/alloc flags

    class_rw_t *data() const {
        return bits.data();
    }
    void setData(class_rw_t *newData) {
        bits.setData(newData);
    }

    void setInfo(uint32_t set) {
        ASSERT(isFuture()  ||  isRealized());
        data()->setFlags(set);
    }

    void clearInfo(uint32_t clear) {
        ASSERT(isFuture()  ||  isRealized());
        data()->clearFlags(clear);
    }

    // set and clear must not overlap
    void changeInfo(uint32_t set, uint32_t clear) {
        ASSERT(isFuture()  ||  isRealized());
        ASSERT((set & clear) == 0);
        data()->changeFlags(set, clear);
    }

    // 此处省略一万行
}

isa

objc_class的第一个成员isa,源码里虽然注释,但也在提醒我们objc_class继承自objc_object,自带了isa特性。isa的流程也已经在上篇文章OC底层-ISA的前生今世分析过了,感兴趣的可以直接去看。占位8字节。

Class superclass

Class superclass表示的父类,也是8字节。

cache_t cache

cache_t cache表示方法缓存,用散列表来缓存调用过的方法,可以提高访问方法的速度。cache_t cache是方法调用又一巧妙设计,这里只关心它在类中占据的内存大小16字节。

class_data_bits_t bits

class_data_bits_t bits 关键先生存储的大部分信息,可以类比isauintptr bits

class_rw_t

class_rw_t中存储这属性列表property_array_t properties、实例方法列表method_array_t methods、协议列表protocol_array_t protocols等信息。class_rw_t中这些存储是程序在runtime(运行时)拷贝添加的,它会先将class_ro_t的内容拷贝过去,然后再将当前类的分类的这些属性方法协议等拷贝到其中。

class_ro_t

class_ro_t中存储这成员变量列表ivar_list_t ivars、类方法列表method_list_t baseMethodList、协议列表protocol_list_t baseProtocols等信息。class_ro_tro的意思是read only,所以class_ro_t存储了当前类在编译期就已经确定的成员变量类方法以及遵循的协议

相关文章

  • 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/fhseyktx.html