iOS面试题:Runtime中,SEL、Method 和 IMP

2022-04-22  本文已影响0人  IOS应用

面试题:Runtime中,SEL、Method 和 IMP有什么区别,使用场景?

:它们之间的关系可以这么解释:一个类(Class)持有一个分发表,在运行期分发消息,表中的每一个实体代表一个方法(Method),它的名字叫做选择子(SEL),对应着一种方法实现(IMP)。具体的分析如下:

SEL sel = @selector(methodName); // 方法名字 NSLog(@"address = %p",sel);// log输出为 address = 0x1df807e29因此类方法定义时,尽量不要用相同的名字,就算是变量类型不同也不行。否则会引起重复,例如:

-(void)setWidth:(int)width; -(void)setWidth:(double)width;
/// Method
struct objc_method {
    SEL method_name; 
    char *method_types;
    IMP method_imp;
 };

方法类型 method_types 是个 char 指针,其实存储着方法的参数类型和返回值类型,即是Type Encoding 编码。

method_imp 指向方法的实现,本质上是一个函数的指针,就是前面讲到的 Implementation

以下文章可以做一个学习参考:

GCD面试要点

block面试要点

Runtime面试要点

RunLoop面试要点

内存管理面试要点

MVC、MVVM面试要点

网络性能优化面试要点

网络编程面试要点

KVC&KVO面试要点

数据存储面试要点

混编技术面试要点

设计模式面试要点

UI面试要点

上一篇 下一篇

猜你喜欢

热点阅读