iOS之Runtime
Runtime是什么
Runtime是一个库,这个库使我们可以在程序运行时创建对象、检查对象,修改类和对象的方法。
- OC是一门动态性比较强的编程语言,允许很多操作推迟到程序运行时再进行;
- Runtime是一套C语言的API,封装了很多动态性相关的函数;
- OC的动态性就是由Runtime API来支撑和实现的
基础知识
- 在
arm64
架构之前,isa
就是一个普通的指针,存储着Class
、Meta-Class
对象的内存地址; - 从arm64架构开始,对
isa
进行了优化,变成了一个共用体(union
)结构,还使用位域来存储更多的信息; - 类对象、元类对象的地址值(二进制)最后三位一定是0,所以16进制的地址值末位总是0或者8;
isa
的位域信息:
isa共用体的64位数中有33位存储的是类/元类的内存地址信息