CTMediator 原理详解(二)

栏目: IOS · 发布时间: 5年前

内容简介:在上一篇文章中我们大概知道了在介绍(BOOL)respondsToSelector:(SEL)aSelector;

在上一篇文章中我们大概知道了 CTMetidor 中的 NSSelectorFromStringNSClassFromStringSEL 这篇文章主要介绍一下 respondsToSelectorperformSelectorNSInvocationNSMethodSignature ,了解完这些之后对理解 CTMediator 很有帮助

在介绍 performSelector 之前,先简单说一下RunTime吧

RunTime

什么是 RunTime ?

  • RunTime 简称运行时。OC就是运行时机制,也就是在运行时候的一些机制,其中最主要的是消息机制, 消息(方法)传递,如果消息(方法)在对象中找不到,就进行转发

RunTime 可以用来做什么 ?

  • 通过 RunTime 我们可以 让一个对象发送消息(也就是执行方法)、交换方法(Method Swizzling)、动态添加方法、给分类增加属性、字典转模型等
// 创建person对象
Person *p = [[Person alloc] init];
// 调用对象方法
[p eat];
// 本质:让对象发送消息
objc_msgSend(p, @selector(eat));
    
// 调用类方法的方式:两种
// 第一种通过类名调用
[Person eat];
    
// 第二种通过类对象调用
[[Person class] eat];
// 用类名调用类方法,底层会自动把类名转换成类对象调用
// 本质:让类对象发送消息
objc_msgSend([Person class], @selector(eat));
复制代码

respondsToSelector

(BOOL)respondsToSelector:(SEL)aSelector;

判断对象是否响应此方法,一般和performSelector 一起使用,防止crash

performSelector

CTMetidor 主要用到就是 RunTime 中的让对象发送消息

performSelector 本质上就是会转化成 objc_msgSend 来进行实现,其内部实现步骤:

CTMediator 原理详解(二)

1、通过obj的isa指针找到它的 class ;

2、在 class 的 method list 找 eat ;

3、如果 class 中没到 eat,继续往它的 superclass 中找 ;

4、一旦找到 eat 这个函数,就去执行它的实现IMP 。

来看一下 CTMetidor 的一段代码:

[target performSelector:action withObject:params];
复制代码

actionSEL ) 我们通过 NSSelectorFromString 获取了, target 我们通过 NSClassFromString 获取,接下来只需要通过 performSelector 方法 执行 targetClass ) 中的 action 即可。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

解密SEO

解密SEO

欧朝晖 / 电子工业出版社 / 2007-05-01 / 49.80元

《解密SEO:搜索引擎优化与网站成功战略》帮助读者建立搜索营销的概念,分析搜索营销中的几种形式的手段,并从认识搜索引擎的原理开始,导出搜索引擎优化的具体解释,向读者引入以搜索引擎优化为宗旨的网站建设的新观念和设计理念。对网站结构优化、单页优化、链接优化等技术进行了详细的解说和示范。读者还可以接触到网站养育的新概念,帮助读者网站发展成熟,达到网络营销的目标。对搜索引擎优化中观念上和技术上常犯的错误,......一起来看看 《解密SEO》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具