从汇编角度来看:无论是C函数或者是OC方法,他们同样都是一个函数的地址。
区别为:
C函数调用直接通过 函数名(参数)找到函数指针 直接执行函数地址,不需要考虑其他问题,只要定义好就能直接用.
OC 是属于类的方法,结构上多了一层封装性,要调方法必须要找到 类的地址然后再通过类的地址找到方法的地址,然后再执行函数地址。
那么:如何能够在C函数里面调用OC的方法呢?
答案就是:指定一个全局变量来保存类的地址,在通过类的地址找到类方法(函数)的地址调用。
1首先新建工程在加入一个SuperViewController 定义一个全局指针指向self
import "SuperViewController.h"
//1定义一个全局静态变量指针用于保存当前类的地址
static SuperViewController *selfClass =nil;
@interface SuperViewController ()
@end
//2函数指针指向自己
- (void)viewDidLoad {
[super viewDidLoad];
//函数指针指向本身
selfClass =self;
}
//3实现一个OC方法
-(void)testAction{
NSLog(@"这是一个OC方法");
}
//4在C函数中调用OC方法
void function(){
[selfClass testAction];
}
//5调用C方法
function();
控制台输出:
2016-09-18 10:19:24.778项目[4702:57024]这是一个OC方法