MST
星途 面试题库

面试题:Objective-C 消息传递机制中SEL和IMP分别是什么,有什么关系?

在Objective-C的消息传递机制里,SEL和IMP是两个重要概念,请阐述它们各自的含义,并说明它们之间存在怎样的联系。
15.9万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试

SEL含义

SEL(选择器)是一个指向方法的selector(方法名)的指针。它本质上是一个唯一标识方法的ID,通过@selector()编译器指令来获取。例如,如果有一个方法 - (void)sayHello;,可以通过 @selector(sayHello) 得到对应的SEL。SEL使得系统可以快速定位到要调用的方法,不同类中相同名字的方法会对应相同的SEL。

IMP含义

IMP(实现)是一个函数指针,它指向方法实现的具体代码。当某个类接收到一条消息时,最终会通过IMP找到并执行对应的方法实现代码。IMP实际指向的函数原型是 id (*IMP)(id, SEL, ...),第一个参数是self(消息接收者),第二个参数是SEL(方法选择器),后面是方法的其他参数。

两者联系

  • SEL是方法的标识,IMP是方法的实现。当向一个对象发送消息时,运行时系统首先根据对象的isa指针找到类的方法列表,在方法列表中通过SEL快速查找对应的IMP。
  • 不同类对于相同SEL可能有不同的IMP。例如,子类可以重写父类的方法,此时父类和子类对于同一个SEL(方法名相同),会有不同的IMP指向不同的具体实现代码。