什么是runtime?

runtime直译就是运行时间,run(跑,运行) time(时间),网上大家都叫它运行时,它是一套比较底层的纯C语言API,属于一个C语言库,包含了很多底层的C语言API,它是OC的幕后工作者,我们平时写的OC代码,在运行过程时,都会转为runtime的C语言代码

runtime有什么用?

如果你之前不知道runtime,可能觉得它没什么用,其实他的作用非常强大.下面我们就以代码的形式为大家揭开runtime的神秘面纱

作用1  获取一个类全部成员变量名(如果你的成员私有,也可以获取到)

我们新建一个Person类,.h代码如下


ios 使用runloop异步 ios runtime详解_ios 使用runloop异步

#import 


ios 使用runloop异步 ios runtime详解_代码注释_02

打印结果


ios 使用runloop异步 ios runtime详解_代码注释_03

你可以试一下,把所有的成员放到.m文件里面,它打印的结果是一样的.

作用2  同理,我们可以获取到一个类的全部属性名


ios 使用runloop异步 ios runtime详解_ios 使用runloop异步_04

打印结果:


ios 使用runloop异步 ios runtime详解_代码注释_05

作用3 获取一个类的全部方法


ios 使用runloop异步 ios runtime详解_API_06

打印结果:


ios 使用runloop异步 ios runtime详解_ios 使用runloop异步_07

我们可以看到所有的方法

作用4 获取一个类遵循的所有协议

先将遵循的协议给注释掉


ios 使用runloop异步 ios runtime详解_API_08

测试代码


ios 使用runloop异步 ios runtime详解_成员变量_09

结果啥都没有打印出来


ios 使用runloop异步 ios runtime详解_API_10

我们把遵循的代码注释给打开

再执行测试代码,打印结果


ios 使用runloop异步 ios runtime详解_API_11

是不是很棒,你可能觉得貌似用处不太大,那接下来我们来看看如何利用runtime归档和解档.

作用5 归档/解档

ios 使用runloop异步 ios runtime详解_成员变量_12

测试如下:

ios 使用runloop异步 ios runtime详解_代码注释_13