Runtime又叫运行时,是一套底层的C语言API。
特性:OC在编译的时候并不知道要调用那个方法函数,只有在运行的时候才知道调用方法函数名称,来找到对应的方法函数进行调用。[C语言在编译的时候就知道要调用那个方法函数]
Runtime的作用
一.发送消息
每当一个类创建了一个方法的时候系统就会为这个方法进行一个编号然后放在方法列表中。当方法进行调用的时候就去方法列表中进行查找。
object在三种层面上与Runtime系统进行交互
1.通过Object-C源代码
2.通过Foundation框架的NSObject类定义的方法
3.通过对Runtime库函数的直接调用
Object-C源代码
多数情况我们只需要编写OC代码即可,Runtime系统自动在幕后搞定一切,编译器会将OC代码转换成运行时代码,在运行时确定数据结构和函数。
通过Foundation框架的NSObject类定义的方法
Cocoa程序中绝大部分都是NSObject类的子类,所以都继承了NSObject的行为。(NSProxy 类时个例外,它是个抽象超类)
一些情况下,NSObject类仅仅定义了完成某件事情的模板,并没有提供所需要的代码。
还有一些NSObject的方法可以从Runtime系统中回去信息,允许对象进行自我检查
-class方法返回对象的类
iskindofclass和isMenberofClass方法检查对象是否存在指定的类的继承体系中
respondsToSelector检查对象能否响应指定的消息
conformsToProtocol检查对象是否实现了指定协议类的方法
methodForSelector返回指定方法实现的地址
一些Runtime的术语的数据结构
SEL
它是selector在OC中的表示(Swift中是Selector类)