runtime是iOS开发中的一个重要知识点,runtime简称运行时,objective-c中最主要的是消息机制,这里我们可以对比下C和OC的操作方式:C语言函数的调用在编译的时候会决定调用哪个函数,而oc中是动态调用的过程,在编译的时候并不真正决定调用哪个函数,只有在真正运行的时候才会根据函数的名称找到其相对应的函数进行调用。
我们知道,方法调用的本质实际是让对象发送消息,我们平时使用的SEL类型实际是个方法编号,根据编号就能找到相对应的方法,iOS使用runtime的具体步奏其实也不麻烦,归纳一下如下:
第一步:导入<objc/message.h>库框架,不导入此框架是无法写响应的函数的;
第二步: 2:BuildSetting中搜索msg,将属性修改成NO,既不严格的检查,xocde从5开始已经不建议使用底层的函数了,因此在这里要把这个开关打开,才能继续使用;
第三步:使用响应的函数即可
下边介绍下简单的使用调用方法,也是根据别人的总结得来的知识,感谢之;
1:调用对象方法;首先说明一点,oc是运行时的概念,所有的方法调用都是发送消息;还有一个SEL类型的概念,SEL说白了就是个编号,记录着方法的编号,每个类都有个方法列表,列表放的就是SEL的编号,对应着相对应的方法的实现;有了这些,就可以使用方法了;具体的方法为:objc_msgSend(),该方法有参数,第一个为实体对象,第二个为相对应的方法,以及响应的参数;调用该函数之后,相应的对象就调用响应的方法,如 objc_msgSend(file, @selector(printHellooWorld));意思即是执行:file对象调用printHellooWorld方法;
2:调用类方法;类方法的调用本质也是将类名转换成类对象然后进行调用;因此使用runtime调用类方法的时候分两步:第一步是:首先拿到类名,第二步是:使用类名调用响应的方法:例子如下:
Class className = [TestFile class];
[className performSelector:@selector(pringClassfunction)];
objc_msgSend(className, @selector(pringClassfunction));
如上就实现了runtime函数对类方法的基本调用;