一、初识Runtime

最近想深入学习一下 runtime 看了比较多的博客和文档,但是好多博主上来就开始讲 runtime 的原理、消息转发机制…… 让我有点蒙,毕竟不是每个人都是有C语言基础的,对于 runtime 的处理机制好多人一下子接受不了。所以我打算从基础的东西一步一步的去深入学习 runtime。现在就开始吧 GO!

runtime 是什么?

Object-C 是基于C的,它为C添加了面向对象的特性。它将很多静态语言在编译和链接时期做的事放到了runtime 运行时来处理,runtime可以进行一些非常底层的操作(用OC无法实现或很难实现),我们平时编写的OC代码在程序运行过程时,其实都转成了runtime的C语言代码。可以说runtime是OC的幕后工作者。

runtime(简称运行时),是一套纯C(C和汇编)写的API。而OC就是运行时机制,也就是在运行时候的一些机制。其中最主要的是消息机制(后边会详细谈到)。

//OC :
[[Person alloc] init];
//runtime :
objc_msgSend(objc_msgSend("MJPerson" , "alloc"), "init")

runtime 可以用来做什么?

1、在程序运行过程中,可以使用runtime 动态的创建一个类(比如说KVO 的底层实现原理)

2、在程序运行过程中,动态地为某个类添加属性/方法。可以用于封装框架(runtime的主要运用方向)更改起来比较自由

3、遍历一个类中所有的成员变量、属性、方法。应用场景比如:字典转model(利用runtime 遍历模型对象的所有属性,根据属性名从字典中读取对应的值,设置到model 的属性中)、自动归档和解档(利用runtime 遍历模型对象的所有属性)

runtime 相关的头文件和函数

runtime 相关的头文件,通过头文件我们可以去查看runtime 相关的各个方法!

#import <objc/message.h>
#import <objc/runtime.h>

runtime 相关的函数:

objc_msgSend : //给对象发送消息
class_copyMethodList : //遍历某个类所有的方法
class_copyIvarList : //遍历某个类所有的成员变量
class_.....

runtime 常用方法

  • Ivar 成员变量
  • Method 成员方法

基本知识也就是这么多

建议参考 :https://blog.csdn.net/coyote1994/article/details/52355026

猜你喜欢

转载自blog.csdn.net/antianyang/article/details/80046500