iOS method_t

  • 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 name;
        RelativePointer types;
        RelativePointer imp;
        ...
    };

public:
    // 与方法列表一起使用的指针修饰符。当方法列表中包含小方法时,设置指针的底部位。
    // 我们在其他地方使用底部位来区分大方法和小方法。
    struct pointer_modifier {
        template 
        static method_t *modify(const ListType &list, method_t *ptr) {...}
    };
    ...
};
  • SEL代表方法/函数名,一般叫选择器(selector),底层结构类似char*

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

  • Type Encoding

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

你可能感兴趣的:(iOS method_t)