内容简介:在上一篇文章中我们大概知道了在介绍(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
即可。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
大数据系统构建
Nathan Marz、James Warren / 马延辉、向磊、魏东琦 / 机械工业出版社 / 2017-1 / 79.00
随着社交网络、网络分析和智能型电子商务的兴起,传统的数据库系统显然已无法满足海量数据的管理需求。 作为一种新的处理模式,大数据系统应运而生,它使用多台机器并行工作,能够对海量数据进行存储、处理、分析,进而帮助用户从中提取对优化流程、实现高增长率的有用信息,做更为精准有效的决策。 但不可忽略的是,它也引入了大多数开发者并不熟悉的、困扰传统架构的复杂性问题。 本书将教你充分利用集群硬件优势的La......一起来看看 《大数据系统构建》 这本书的介绍吧!
图片转BASE64编码
在线图片转Base64编码工具
HEX CMYK 转换工具
HEX CMYK 互转工具