ObjC运行时部分概念解析(一)

转型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中的对象的方法.

posted @ 2016-11-02 12:57  钱鸿强  阅读(187)  评论(0编辑  收藏  举报