一、什么是Runtime
Runtime是一套底层的纯C语言的API。编写的OC、Swift代码在运行中以C语言执行,Runtime是OC、Swift的幕后工作者。
二、Runtime的机制
对于C语言,函数的调用在编译的时候会决定调用哪个函数,编译完成之后直接顺序执行,无任何二义性。
OC的函数调用成为消息发送。属于动态调用过程。在编译的时候并不能决定真正调用哪个函数(事实证明,在编译阶段,OC可以调用任何函数,即使这个函数并未实现,只要申明过就不会报错。而C语言在编译阶段就会报错)。
只有在真正运行的时候才会根据函数的名称找到对应的函数来调用。
三、Runtime的具体实现
例如OC中的对象调用方法,最终会调用
objc_msgSend(receiver,@selector(message));
receiver会根据@selector(message)(这个selector其实就是C里面的字符串)在receiver的method_cache、method_list中寻找,如果没找到,在超类中的寻找。如果还没找到,报错。
网友评论