RunTime
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RunTime相关的知识,希望对你有一定的参考价值。
一、基本概念
1、runtime简称运行时,就是系统运行时的一些机制,其中最主要的是消息机制。
2、对于C语言,函数的调用在编译的时候已经决定了,编译完成后直接按顺序执行。
3、对于OC函数的调用就是发送消息。属于动态调用,编译的时候并不能决定调用哪个函数,只有在真正运行时才会根据函数名来调用此函数。
二、列子
1.OC代码调用一个方法
2.在编译时RunTime会将上述代码转化成[发送消息]
objc_msgSend(self.xiaoming,@selector(answer));
三、常见作用
1. 动态的添加对象的成员变量和方法
(1.1)动态添加方法
class_addMethod([xiaoMing class], @selector(guess), (IMP)guessAnswer, "[email protected]:");
IMP)guessAnswer 意思是guessAnswer的地址指针;
"[email protected]:" 意思是,v代表无返回值void,如果是i则代表int;@代表 id sel; : 代表 SEL _cmd;
“[email protected]:@@” 意思是,两个参数的没有返回值。
2. 动态交换两个方法的实现
Method m1 = class_getInstanceMethod([xiaoMing class], @selector(firstSay));
Method m2 = class_getInstanceMethod([xiaoMing class], @selector(secondSay));
method_exchangeImplementations(m1, m2);
3. 实现分类也可以添加属性
4. 实现NSCoding的自动归档和解档
5. 实现字典转模型的自动转换
以上是关于RunTime的主要内容,如果未能解决你的问题,请参考以下文章
为啥在 Zapier 中使用此代码时会出现 Runtime.MarshalError?