内容简介:最近开始用在理解CTMediator原理之前我们先弄懂这么几个概念:
最近开始用 CTMetidor
来做 App模块化
,顺便研究一下它的实现原理
CTMetidor
源码中经常出现如下关键词: NSSelectorFromString
、 NSClassFromString
、 SEL
这些是个啥???
在理解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; // 方法实现 } 复制代码
我们可以看到该结构体中包含一个 SEL
和 IMP
,实际上相当于在 SEL
和 IMP
之间作了一个映射,将 SEL
和 IMP
进行了关联,通过 SEL
我们便可以找到对应的 IMP
,从而调用方法的实现代码。
SEL(selector)
-
方法编号,对方法名hash化的字符串
-
无论什么类里,只要方法名相同,
SEL
就相同。项目里的所有SEL
都保存在一个NSSet集合里(NSSet集合里的元素不能重复),所以查找对应方法,只要找到对应的SEL
就可以了。
既然SEL是方法的唯一标识,那不同的类调用名字相同的方法怎么办呢?
每个方法名有对应的唯一seletor,其 SEL
相同,但对应的 IMP
函数指针不同。
如何获取SEL?
SEL s1 = @selector(test); SEL s2 = NSSelectorFromString(@“test”) 复制代码
以上两个方法是等价的
IMP (implement)
- 一个函数指针,保存了方法的地址,内部实现:
typedef id (*IMP)(id, SEL, ...); 复制代码
- 包含
id
(消息接受者,也就是对象),SEL
(方法的名字),参数
XX调用XXX方法,参数XX也都确定了
执行对应的方法:
[object test]; // @selector(test) 是一个C的字符串 [object performSelector:@selector(test)]]; // 转换成如下实现方式 objc_msgSend(object,@selector(test)) 复制代码
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Operating System Algorithms
Nathan Adams、Elisha Chirchir / CreateSpace Independent Publishing Platform / 2017-4-21 / USD 39.15
Operating System Algorithms will walk you through in depth examples of algorithms that you would find in an operating system. Selected algorithms include process and disk scheduling.一起来看看 《Operating System Algorithms》 这本书的介绍吧!
RGB转16进制工具
RGB HEX 互转工具
HEX HSV 转换工具
HEX HSV 互换工具