您的位置:首页 > 移动开发 > Objective-C

当执行[object selector:para]的时候,发生了什么?

2014-02-20 23:54 381 查看
本来只是想写一下SEL,IMP这些类型到底有什么意义的,结果,网上查资料挺丰富的,干脆把整个过程都捋捋.

在Objective-C中的方法调用,其实是调用下面这个函数向对象发送一个信息.

id objc_msgSend(id self, SEL op, ...)

self就是接受该消息的对象,...就是参数列表,这里比较特别的是SEL这个类型.

从Apple的文档中,可以看到   

 typedef struct objc_selector *SEL;

并解释了SEL代表了一个Method Selector.而Method Selecto则代表了Method在运行时的名字.

光看文档解释,可能也不是很清楚,接下来,我们慢慢发掘其中的奥妙.

除了SEL,在文档中,还能看到IMP这种类型.

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

其实就是个函数指针嘛,指到哪呢?必然是指到函数的开始地址.

因为苹果对我们隐藏了实现的细节,所以我只能根据收集的资料猜测,调用[object selector:para]方法时,

(1)调用sel_registerName("selector")来获取SEL

(2)调用objc_msgSend(object, SEL, para)

(3)在objc-msgSend中通过SEL获取到IMP

(4)调用IMP指向的函数.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: