内容简介:在上一篇文章中我们大概知道了在介绍(BOOL)respondsToSelector:(SEL)aSelector;
在上一篇文章中我们大概知道了 CTMetidor 中的 NSSelectorFromString 、 NSClassFromString 、 SEL 这篇文章主要介绍一下 respondsToSelector 、 performSelector 、 NSInvocation 、 NSMethodSignature ,了解完这些之后对理解 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 来进行实现,其内部实现步骤:
1、通过obj的isa指针找到它的 class ;
2、在 class 的 method list 找 eat ;
3、如果 class 中没到 eat,继续往它的 superclass 中找 ;
4、一旦找到 eat 这个函数,就去执行它的实现IMP 。
来看一下 CTMetidor 的一段代码:
[target performSelector:action withObject:params]; 复制代码
action ( SEL ) 我们通过 NSSelectorFromString 获取了, target 我们通过 NSClassFromString 获取,接下来只需要通过 performSelector 方法 执行 target ( Class ) 中的 action 即可。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Mechanics of Web Handling
David R. Roisum
This unique book covers many aspects of web handling for manufacturing, converting, and printing. The book is applicable to any web including paper, film, foil, nonwovens, and textiles. The Mech......一起来看看 《The Mechanics of Web Handling》 这本书的介绍吧!
XML、JSON 在线转换
在线XML、JSON转换工具
HEX HSV 转换工具
HEX HSV 互换工具