探究Class本质

比较简单,只是记录一下知识点。

一、 Class
1.网上扣了一张图片:


探究Class本质_第1张图片
image.png

Class 的一个结构。
关于为什么&FAST_DATA_MASK是一种计算位域方法,取出对应位域的值,具体可以看之前写的一篇探究 isa 本质

2.class_rw_t 真实定义:

class_rw_t:读写、运行时调用方法都是取之于此、类的初始内容、分类的内容。

struct class_rw_t {
    // Be warned that Symbolication knows the layout of this structure.
    uint32_t flags;
    uint32_t version;
    const class_ro_t *ro;
    method_array_t methods;
    property_array_t properties;
    protocol_array_t protocols;
    Class firstSubclass;
    Class nextSiblingClass;
};
class method_array_t : 
    public list_array_tt 
{
    typedef list_array_tt Super;

 public:
    method_list_t **beginCategoryMethodLists() {
        return beginLists();
    }
    
    method_list_t **endCategoryMethodLists(Class cls);

    method_array_t duplicate() {
        return Super::duplicate();
    }
};

method_array_t->method_list_t->method_t

3.class_ro_t 真实定义:

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;
    }
};

method_list_t -> method_t

4.method_t 真实定义:
struct method_t {
SEL name;
const char *types;
IMP imp;
};

SEL name:方法名字,方法选择器
const char *types:方法类型,字符串表示,方法编码
IMP imp:函数指针,函数实现地址

5.Type Encoding
iOS中提供了一种@encode的指令,可以将具体类型用字符串表示出来。

探究Class本质_第2张图片

探究Class本质_第3张图片
image.png
NSLog(@"%s",@encode(id));

2018-09-03 11:51:37.186767+0800 runtime[1030:38253] @

你可能感兴趣的:(探究Class本质)