什么是 IMP ?

480 阅读1分钟

SEL一样,IMP实际上也是个函数指针,它指向方法实现的首地址,可以把它理解为方法的具体实现。其定义如下:

 id(*IMP)(id,SEL, ...)

SEL指针查找方法,实际上就是查找方法的IMP。由于每个方法对应唯一的SEL,所以可以通过SEL方便快速准确地获取它所对应的IMP。取得IMP之后,就可以像调用普通的C语言函数一样来使用这个函数指针了。

在objc/runtime.h 中定义用于表示的方法结构体

typedef struct objc_method *Method;

struct objc_method {
  SEL method_name
  char *method_types
  IMP method_imp
}

可以看到结构体objc_method包含了一个SEL和IMP,实际上它相当于在SEL和IMP之间作了一个映射。