美文网首页
iOS method_t

iOS method_t

作者: 山杨 | 来源:发表于2021-11-03 20:14 被阅读0次
    • method_t 是对方法/函数的封装
    struct method_t {
        // "big" method传统意义上的方法(用selector、类型和实现的三指针结构体)
        struct big {
            SEL name;// 函数名
            const char *types;// 编码(返回值类型、参数类型)
            MethodListIMP imp;// 指向函数的指针
        };
    private:
        // "small" method是用名称、类型和实现3个相对偏移指针
        struct small {
            // 名称字段指向一个selector(共享缓存中),或者指向一个selref(在其他地方)
            RelativePointer<const void *> name;
            RelativePointer<const char *> types;
            RelativePointer<IMP> imp;
            ...
        };
    
    public:
        // 与方法列表一起使用的指针修饰符。当方法列表中包含小方法时,设置指针的底部位。
        // 我们在其他地方使用底部位来区分大方法和小方法。
        struct pointer_modifier {
            template <typename ListType>
            static method_t *modify(const ListType &list, method_t *ptr) {...}
        };
        ...
    };
    
    • SEL代表方法/函数名,一般叫选择器(selector),底层结构类似char*

      不同类中相同名字的方法,所对应的selector都相同且唯一。可以通过@Selector()和sel_registerName()获得

    • Type Encoding

      iOS文档中提供了@encode()指令,可以将具体的类型表示成字符串编码

    相关文章

      网友评论

          本文标题:iOS method_t

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