探究Class本质

比较简单,只是记录一下知识点。
一、 Class
1.网上扣了一张图片:

探究Class本质
文章图片
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; #endifconst 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:函数指针,函数实现地址
【探究Class本质】5.Type Encoding
iOS中提供了一种@encode的指令,可以将具体类型用字符串表示出来。
探究Class本质
文章图片

探究Class本质
文章图片
image.png
NSLog(@"%s",@encode(id)); 2018-09-03 11:51:37.186767+0800 runtime[1030:38253] @

    推荐阅读