转型iOS已经许久了,Runtime(运行时)还没有好好了解过.之前没有阅读过源码,紧紧凭借自己的臆测.现在阅读下源码,做一些笔记.方便再次翻阅
SEL
SEL是一个关键字,如果没有涉及runtime的话,基本上不会和这家伙打交道.它被定义在objc.h中
/// An opaque type that represents a method selector.
typedef struct objc_selector *SEL;
可以看到它是一个结构体指针.然而并没有给出objc_selector这个结构体的定义.我翻阅的许多资料.这个结构体最主要用来保存函数名.它很可能是这样的
struct objc_selector{
const char *sel_types;
};
原因是下面这个方法
const char *sel_getName(SEL sel)
{
if (!sel) return "<null selector>";
return (const char *)(const void*)sel;
}
IMP
IMP也是一个关键字,我猜测是implementation的前三个字母.这个可以比较好理解,是个函数指针.它被定义在objc.h中
typedef id (*IMP)(id, SEL, ...);
这个函数指针的类型中的第一个参数是隐式的指针self.它只能指向objc_object就是OC中的对象的方法.