- 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,从而调用方法的实现代码。
网友评论