为您揭开runtime的神秘面纱 <一>

2016-05-06  本文已影响43人  逆光少年

最近开始了runtime的学习.以下将以我的学习过程来给大家讲解runtime这个非常重要,但是又很宽泛的一个东西,希望给迷茫中的你一点帮助.也作为自己的学习笔记.、

什么是runtime?

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

runtime有什么用?

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

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

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

B4322803-210A-47FE-AAEF-BADBD7E8D2A0.png

这些成员变量都是公有的,我们直接点开头文件就可以看到,如果是系统的类呢,你是不是就不知道类里面有哪些成员了,利用runtime可以轻松解决这个问题,现在我们来测试一下,记得要加 #import

39388CFE-05AE-44D6-865E-FAB418FE5868.png

打印结果

0122B263-19EC-492A-9DC2-893C946AFCE1.png

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

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

10F300ED-26B6-4625-8B1A-42EAC2553E38.png

打印结果:

01F546F6-6C9B-4F35-B21C-533CBF6C73CB.png

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

EC7A232B-B1CE-4913-9B44-35AC77420CB7.png

打印结果:

6AE26146-9AC5-4923-8355-4528F6DA944C.png

我们可以看到所有的方法

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

先将遵循的协议给注释掉

7BF1ACDC-96CA-40FC-8B3F-460D4E037792.png

测试代码

08F68B4B-4580-487A-9AC4-F9846E22C34C.png

结果啥都没有打印出来

935B9DA0-E0F4-49E3-836C-791D8700C41E.png

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

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

04E1D94B-9A75-49BD-A1A4-B7407288CDD2.png

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

作用5 归档/解档测试如下:打印结果:

5ADBA12F-0992-4F3F-94F0-76F7974DF621.png 02C27D19-2D5B-4430-9AAA-5577E38FFE02.png 4121C655-62AA-4AED-96E7-0F24287F1B11.png

是不是比你以前归档解档简单多了。

runtime作用太大了,学习了才知道,这是我今天学习的过程和一点经验,后续我还会继续把学习的过程分享给大家,希望能给你一些帮助.

附上Demo地址:
https://github.com/SunnyYoung0917/XDRuntimeDemo.git

上一篇 下一篇

猜你喜欢

热点阅读