美文网首页
探究Class本质

探究Class本质

作者: 我是C | 来源:发表于2018-09-03 11:42 被阅读10次

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

    一、 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<method_t, method_list_t> 
    {
        typedef list_array_tt<method_t, method_list_t> 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_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的指令,可以将具体类型用字符串表示出来。


    image.png
    NSLog(@"%s",@encode(id));
    
    2018-09-03 11:51:37.186767+0800 runtime[1030:38253] @
    

    相关文章

      网友评论

          本文标题:探究Class本质

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