场景
编译时将源代码编译成机器语言(如汇编代码),最终生成二进制代码。
OC是一门动态语言,有些类、成员变量以及方法实现在编译时并没有确定,而是推迟到运行时才决定的。运行时系统可以用来解决编译后的代码,确定最终类型和实现。
Runtime就是一套C语言API。
探寻
实例方法&类方法
实例方法存在于类的方法列表中,类方法存在于元类方法列表中。
实例对象是类的实例,类对象是元类对象的实例。
Runtime 应用
给分类添加属性
给分类添加属性时,系统只会声明get、set方法,不会帮我们实现,因此想要实现我们可以借助runtime的API来实现。
具体实现参考:
iOS Runtime之给分类添加属性
消息转发流程
就是方法在调用时,执行的一系列流程。包含方法缓存、方法列表、动态解析、快速转发、常规转发等。
具体实现参考:
iOS Runtime之消息转发
序列化与反序列化
序列化与反序列化可以通过runtime获取属性名称,通过kvc实现设置属性的值。
具体实现参考:
iOS Runtime之序列化与反序列化
给原方法增加其他功能实现
即方法交换时调用原方法的实现,而因为交换方法后,原方法的实现对应方法名称为当前方法名称,因此只需调用自身方法名一次即可。
1. 方法交换在+load方法中调用,让方法交换只执行一次。
2. 方法交换不是必须在+load方法中进行的,+load方法执行环境决定了它比较适合做方法交换。
3. +load方法在程序启动时调用一次,分类的+load方法调用顺序取决于编译顺序。
具体方法交换实现参考:
iOS Runtime之方法交换
动态创建类
通过Runtime运行时特性,动态创建类,添加成员变量与方法。
具体实现参考:
iOS Runtime之动态创建类
其他
暂时没有了,有的话再补充。