美文网首页
iOS Runtime ---- Method = SEL +

iOS Runtime ---- Method = SEL +

作者: iOS_愛OS | 来源:发表于2018-06-08 11:40 被阅读113次
    Method.png
    • SEL 方法选择器,选择因子

    结构如下:

    typedef struct objc_selector *SEL;
    

    Objective-C 在编译的时候,会依据方法的名字、参数序列、生成一个整型标识的地址( int 类型的地址):这个标识就是 SEL
    只要方法相同, SEL 就是一样的。
    获取 SEL 值:
    a、sel_registerName函数
    b、Objective-C编译器提供的@selector()
    c、NSSelectorFromString()方法


    • IMP 实际上是一个函数指针,指向方法实现的地址。
      结构如下:
    /*
        第一个参数:是指向self的指针(如果是实例方法,则是类实例的内存地址;如果是类方法,则是指向元类的指针)
        第二个参数:是方法选择器(selector)
        接下来的参数:方法的参数列表。
    */
    id (*IMP)(id, SEL,...)
    

    • Method 用于表示类定义中的方法
      结构如下
    typedef struct objc_method *Method
    struct objc_method{
        SEL method_name      OBJC2_UNAVAILABLE; // 方法名
        char *method_types   OBJC2_UNAVAILABLE;
        IMP method_imp       OBJC2_UNAVAILABLE; // 方法实现
    }
    

    我们可以看到该结构体中包含一个SEL和IMP,实际上相当于在SEL和IMP之间作了一个映射。有了SEL,我们便可以找到对应的IMP,从而调用方法的实现代码。

    相关文章

      网友评论

          本文标题:iOS Runtime ---- Method = SEL +

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