运行时(runtime)

1>是什么:

1.是一套纯C语言的API,属于一个C语言的库,包含了很多底层的C语言的API

2.平时编写的OC代码,在运行过程中,其实最终都是转换成了runtime的C语言代码,runtime算是OC的幕后工作者

3.举例

//runtime实现机制

//OC

[[XZYPerson alloc]init];

//C语言

objc_msgSend(objc_msgSend("XZYPerson",@"alooc"),@"init");

2>用法:

1.runtime是OC的底层,可以进行一些非常底层的操作(用OC是无法实现的,不好实现)

*在程序运行过程中动态生成的类(比如KVO的底层实现)

*在程序运行过程中动态的为某个类添加属性\方法修改属性值\方法(重写对象的setter方法)

*可以遍历一个类的所有成员变量(属性)\所有方法

3.相关的头文件和方法

1.头文件

2.相关应用

*NSCoding(归档和解档)

*字典转模型(利用runtime遍历模型对象的所有属性,很据属性名称从字典取出对应的值,设置到模型的属性上)

*KVO(利用runtime动态产生一个类)

*用于封装框架

3.相关函数

*objc_msgSend: 给对象发送消息

*class_copyMethodList: 遍历某个类的所有的方法

#class_copyIvarList: 遍历某个类所有的成员变量 该方法等同于class_copyPropertyList,返回的都是一个类的所有成员变量数组,但是class_copyIvarList返回的是一个指针数组 用Ivar的对象接收,而class_copyPropertyList返回的C语言的数组,用objc_property_t的对象接收

*class_...

4>必备常识

1.Ivar: 成员变量

2.Method: 成员方法

你可能感兴趣的:(运行时(runtime))