美文网首页
iOS 类的结构分析

iOS 类的结构分析

作者: Joker_King | 来源:发表于2019-12-26 20:44 被阅读0次

在iOS开发中,类使我们最常接触的一个名词,那么它到底是什么呢?它内部的结构如何。我们通过点击查看Class可知

typedef struct objc_class *Class;

Class其实是一个objc_class的结构体。
那么objc_class又是什么呢,我们来继续探索。

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 和一些自定义的标识。
//。。。。其他的省略
}

通过源码查看得知,objc_class是一个继承于objc_object的结构体。

/// Represents an instance of a class.
struct objc_object {
    Class _Nonnull isa  OBJC_ISA_AVAILABILITY;
};

objc_class通过继承objc_object获得了其中唯一的isa成员变量。

class_rw_t部分代码

struct class_rw_t {
    // Be warned that Symbolication knows the layout of this structure.
//...省略
    const class_ro_t *ro;

    method_array_t methods; //实例方法
    property_array_t properties; //属性
    protocol_array_t protocols; //协议
//...省略
}

class_rw_t是通过bits调用data方法得来的,我们来到data方法内部实现。我们可以看到,data函数内部仅仅对bits进行&FAST_DATA_MASK操作。

#define FAST_DATA_MASK          0x00007ffffffffff8UL
class_rw_t* data() {
    return (class_rw_t *)(bits & FAST_DATA_MASK);
}

我们通过查看class_ro_t的源码得知,成员变量信息是存储在这里的。

struct class_ro_t {
    uint32_t flags;
    uint32_t instanceStart;
    uint32_t instanceSize;//实例对象大小
#ifdef __LP64__
    uint32_t reserved;
#endif

    const uint8_t * ivarLayout;
    
    const char * name;
    method_list_t * baseMethodList;
    protocol_list_t * baseProtocols;
    const ivar_list_t * ivars;//成员变量

    const uint8_t * weakIvarLayout;
    property_list_t *baseProperties;

    method_list_t *baseMethods() const {
        return baseMethodList;
    }
};

得出如下图总结


类的结构

相关文章

  • iOS类结构:cache_t分析

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

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

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

  • iOS 类的结构分析(下)

    在上一篇 iOS 类的结构分析(上) 分析了类的结构、isa 的走位以及类的内存分布(属性列表&实例方法列表),这...

  • iOS底层之cache_t探究

    我们在iOS底层之类的结构分析分析了类的内部结构,而类的C/C++底层实际是objc_class结构体,其中包含了...

  • [iOS] 类 & 类结构分析

    1. 类的分析 1.1 元类的引入 我们可能之前已经知道类其实也是一个对象,类的 isa 指针指向的是它的元类,...

  • iOS 类结构分析

    前言 通过本篇文章可以了解1.isa的走位2.类结构的分析3.什么是元类4.supclass的走位5.objc_c...

  • iOS类结构分析

    本文主要来探索一下iOS中类的结构,作为一个iOS开发者,我们有必要去了解关于类的底层知识。下面开始我们的探索。 ...

  • iOS - 类结构分析

    我们都知道,一个类可以创建多个不同实例对象,类自己也是对象(类对象),那么类在内存中会存在几份呢?看下面结果 得出...

  • iOS 类的结构分析

    在谈及面向对象编程的时候,总是离不开 对象 与 类 。对象 是对客观事物的抽象,类 是对 对象 的抽象。它们的关系...

  • iOS 类的结构分析

    1. 类的初探 在isa结构解析中,自定义LSPerson 类继承自NSObject,重写成C++代码如下 str...

网友评论

      本文标题:iOS 类的结构分析

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