有什么用?
Runtime是属于OC的底层实现,可以进行一些非常底层的操作(用OC很难完成的)。
1、利用Runtime,在程序运行中,可以动态地创建一个类(比如KVO)。
2、利用Runtime,在程序运行中,可以动态地修改一个类的属性 / 方法,添加属性 / 方法。
3、遍历一个类的所有成员变量。
应用场景:
1、归档 / 解档,Runtime获取属性和方法。
2、交换两个方法的实现(OC中的方法由方法编号SEL和方法实现IMP两部分。利用swizzle,可以进行方法交换)。
3、KVO的内部实现原理(响应式编程)。动态创建一个子类 NSKVONotifying_Person,重写set方法,改变 isa指针,指向子类。
4、消息转发机制(a、动态方法解析 +resolveInstanceMethod:方法;b、消息快速转发 -forwardingTargetForSelector:方法;c、完整消息转发 先将方法签名-methodSignatureForSelector: 然后转发 - (void)forwardInvocation:)。