引入头文件
#import <objc/runtime.h>
#import <objc/message.h>
1. 以前未使用objc_msgSend时,我们是这样调用testRuntime函数的
- (void)runTimeClicked
{
[self testRuntime];
}
- (void)testRuntime
{
NSLog(@"-----timeruntiem---");
}
2.现在使用objc_msgSend,实现以下方法就可以直接调用testRuntime函数了。
- (void)runTimeClicked
{
//objc_msgSend(self,@selector(testRuntime));
SEL testFunc = NSSelectorFromString(@"testRuntime");
//ios8下特殊写法
((void(*)(id,SEL, id,id))objc_msgSend)(self, testFunc, nil, nil);
}
- (void)testRuntime
{
NSLog(@"-----timeruntiem---");
}
为什么我们不直接用1中的直接调用方法了,要学习2中的运行时方法?
因为当你们的APP是个很大的项目时,需要多人协作,各自模块(framework,lib.a格式)各自开发人员去开发。为了减少各自模块之前的耦合度,实现分离,此时上面的运行时方法,就是很好的解决方案。