1、什么是runtime?
~runtime直译就是运行时间网上大家都叫它运行时,它是一套比较底层的纯C语言API,属于一个C语言库,包含了很多底层的C语言API,它是OC的幕后工作者,我们平时写的OC代码,在运行过程时,都会转为runtime的C语言代码。
~与静态语言不同,OC将在编译和链接时的一些操作放到了运行时来处理。
~因此OC不仅需要一个编译器,还需要一个运行时系统执行编译的代码。
~OC的运行时系统其实是一个Runtime库,使用C语言和汇编语言编写的,Runtime使得C语言有了面向对象的能力。
C + Runtime = Objective-C
2、什么时候用Runtime
与Runtime交互的三种方式
~通过OC源代码:大部分情况下,Runtime是在后台自动运行的,只需要编写和编译OC代码即可。
~通过NSObject的方法:NSObject提供了很多从runtime获取信息的方法,例如:;description方法。(什么时候会调用description方法?用@””打印一个对象的时候,会调用description方法,这个方法里,从runtime里获取对象相关信息)
~通过runtime函数:runtime库提供了一些可以使用的结构体和函数,可以通过这些接口访问runtime,这些函数定义在usr/include/objc文件里
3、拓展:
什么是isa?
什么是元类(meta-class)?
如果把所有的类都理解成一个对象的话,那这个对象所属的类,就是这个对象的元类,即:meta-class。
Class结构体(一个类的实现在底层是用C中结构体表示)中,isa指针所指向的类就是meta-class。
meta-class中存储的是一个类所有的方法。每个类都会有一个单独的meta-class,因为每个类的类方法不可能都一样的。对象的isa指向它所属的类,类的isa指向它所属的meta-class,所有的meta-class的isa指向根类,根类的isa指向它自己。