美文网首页
@selector (makeText)

@selector (makeText)

作者: 汪斗斗 | 来源:发表于2015-07-30 10:28 被阅读53次

这是一个SEL的方法选择器,SEL主要作用是快速通过方法的名字(makeText)查找到对应方法的函数指针,然后调用其函数。SEL本身是一个Int类型的一个地址,地址中存放着方法的名字,对于一个类中,每一个方法都对应着一个SEL,所以iOS中不能出现同名方法,即使参数类型不同,因为SEL是根据方法名字生成的,相同的方法名只能对应一个SEL。

具体消息发送之后是怎么来动态查找对应的方法的:

首先,编译器将代码[obj makeText];转化为objc_msgSend(obj, @selector (makeText));,在objc_msgSend函数中。首先通过obj的isa指针找到obj对应的class。在Class中先去cache中 通过SEL查找对应函数method(猜测cache中method列表是以SEL为key通过hash表来存储的,这样能提高函数查找速度),若 cache中未找到。再去methodList中查找,若methodlist中未找到,则取superClass中查找。若能找到,则将method加 入到cache中,以方便下次查找,并通过method中的函数指针跳转到对应的函数中去执行。

相关文章

网友评论

      本文标题:@selector (makeText)

      本文链接:https://www.haomeiwen.com/subject/xpomqttx.html