runtime是什么?
1.runtime 是一套底层的C语言API(包含了很多强大实用的C语言数据类型,C语言函数)
2.实际上,平时我们编写的OC代码,底层都是基于runtime实现的,也就是说,我们编写的OC代码,最终都是转成了底层的runtime代码(C语言代码)
总结:简单明了的说,OC的底层是C语言,而runtime就相当于是OC的幕后工作者,程序的运行都会经过OC代码 ---> runtime的 C 语言代码这一过程。
runtime在有什么作用?
runtime能够动态的生成,修改,删除一个类,一个成员变量,一个方法。
runtime常见的函数,头文件
#import <objc / runtime . h>
Ivar * class_copyIvarList : 获得某个类内部的所有成员变量 Ivar:成员变量
Method * class _copyMethodList : 获得某个类内部的所有方法 Method:成员方法
Method class_getInstanceMethod : 获得某个实例方法(对象方法,减号— 开头)
Method class_getClassMethod : 获得某个类方法(加号+开头)
Method_exchangeImplementations : 交换2个方法的具体实现
我们在实际开发中调用方法实际发生了什么呢?
[self printMessageWithString:@"Hello World!"];
它实际上会被编译器翻译成:
objc_msgSend(self,@selector(printMessageWithString:),@"Hello World!")
runtime的相关应用:
1.封装框架,runtime机制在实际开发中的主要用途
2.NSCoding(归档,解档,利用runtime遍历模型对象的所有属性)
3.NSDictionary:(利用runtime遍历模型对象的所有属性, 根据属性名从字典中取出对应的值, 设置到模型的属性上)
4.KVO(利用了runtime动态的产生一个类)