为您揭开runtime的神秘面纱

摘要

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

作者:黄轩    稿源:cocoachina

1459929474-7264-015.jpg-wh-651x-s-1673774964

最近想换工作,本来信心满满的,可直到面试,才知道自己所掌握知识的薄弱的地方。于是针对面试薄弱,我开始了runtime的学习.以下将以我的学习过程来给大家讲解runtime这个非常重要,但是又很宽泛的一个东西,希望给迷茫中的你一点帮助.也作为自己的学习笔记.

什么是runtime?

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

runtime有什么用?

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

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

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

1459929476-6344-AHA6-Nvfk8564.png-s-34687307

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

1459929476-7464-fXd5UIA8044.png-s-3509259058

打印结果

1459929476-8027-889.png-wh-600x-s-1432838152

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

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

1459929474-9968-s514.png-wh-600x-s-882524809

打印结果:

1459929474-8641-q8491.png-wh-600x-s-13167702

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

1459929476-9823-155.png-wh-600x-s-2087815185

打印结果:

1459929479-5734-836.png-wh-600x-s-3834319401

我们可以看到所有的方法

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

先将遵循的协议给注释掉

1459929478-2911-3E2uXFyo599.png-s-3562498411

测试代码

1459929480-5772-308.png-wh-600x-s-2198198653

结果啥都没有打印出来

1459929480-5359-Ahs7T2cE059.png-s-1023483332

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

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

1459929480-9582-g289.png-wh-600x-s-158151652

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

作用5 归档/解档

1459929480-9963-323.png-wh-600x-s-2775564520

测试如下

1459929480-2465-214.png-wh-600x-s-2949641224

打印结果:

1459929483-5338-ZeZ7bKbw094.png-s-2919970177

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

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

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: