在iOS开发过程中,使用Runtime的场景虽然没有GCD多,但是也是一个不容忽视的模块,而且在面试找工作的时候也是面试官必考题。那么下面就来了解一下Runtime的相关知识,大牛请绕行,不喜勿喷。
一、Runtime概念
1.Runtime,又叫运行时,是一套关于底层的C语言API,为iOS内部的核心之一,我们在编写OC代码的时候,底层都是基于它来实现的。
Objective-C是一门面向对象的动态语言,它会将一些工作放在代码运行时才处理而并非编译时。也就是说,有很多类和成员变量在编译的时候是不知道的,而在运行时,所编写的代码会转换成完整的确定的代码运行。因此,指望编译器是远远不够的,还需要一个运行时系统(Runtime system)来处理编译后的代码。Runtime基本是用C和汇编写的,由此可见苹果为了动态系统的高效而做出的努力。苹果和GNU各自维护一个开源的Runtime版本,这两个版本之eg:[receiver message];
底层运行时会被编译器转化为:
objc_msgSend(receiver, selector)
如果它还有参数,比如:
[receiver message:(id)arg...];
底层运行时,会被编译器转化为:
objc_msgSend(receiver, selector, arg1, arg2, ...)
2.为什么需要Runtime: