ios底层原理

CTMediator 原理详解(一)

2019-01-07  本文已影响0人  Lucky_Roc

最近开始用CTMetidor来做App模块化,顺便研究一下它的实现原理

CTMetidor 源码中经常出现如下关键词:NSSelectorFromStringNSClassFromStringSEL 这些是个啥???

在理解CTMediator原理之前我们先弄懂这么几个概念:

Method

先来看一下Method相关的定义

typedef struct objc_method *Method
struct objc_method{
    SEL method_name      OBJC2_UNAVAILABLE; // 方法名
    char *method_types   OBJC2_UNAVAILABLE;
    IMP method_imp       OBJC2_UNAVAILABLE; // 方法实现
}
Method结构

我们可以看到该结构体中包含一个SELIMP,实际上相当于在SELIMP之间作了一个映射,将SELIMP进行了关联,通过SEL我们便可以找到对应的IMP,从而调用方法的实现代码。

SEL(selector)

既然SEL是方法的唯一标识,那不同的类调用名字相同的方法怎么办呢?

每个方法名有对应的唯一seletor,其SEL相同,但对应的IMP函数指针不同。

如何获取SEL?

SEL s1  = @selector(test);
SEL s2 = NSSelectorFromString(@“test”)

以上两个方法是等价的

IMP (implement)

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

XX调用XXX方法,参数XX也都确定了

执行对应的方法:

[object test];
// @selector(test) 是一个C的字符串
[object performSelector:@selector(test)]];
// 转换成如下实现方式
objc_msgSend(object,@selector(test))

总结

上一篇 下一篇

猜你喜欢

热点阅读