C函数调用OC方法

来源:互联网 发布:淘宝对新店的扶持 编辑:程序博客网 时间:2024/05/16 09:40
从汇编角度来看:C函数也好OC方法也好,他们同样都是一个函数的地址。
区别:
C函数调用直接通过 函数名(参数)找到函数指针 直接执行函数地址,不需要考虑其他问题,只要定义好 就能直接用.
   
OC 是属于类的方法,结构上多了一层封装性,要调方法必须要找到 类的地址然后再通过类的地址找到方法的地址,然后再执行函数地址。


那么:如何能够在C函数里面调用OC的方法呢?
答案就是:指定一个全局变量来保存类的地址,在通过类的地址找到类方法(函数)的地址调用。

1首先新建工程在加入一个ViewController 定义一个全局指针指向self
[java] viewplaincopy
#import "MainController.h"
//1
定义一个全局指针变量用于保存当前类的地址MainController *OCp = nil;
@interface MainController ()
@end

2在内部分别定义一个C函数和一个OC方法
[java] viewplaincopy

//定义一个OC方法-(void)OCSayHi{   
NSLog
(@"hi");
}

//
定义一个C函数
void CSayHi(){   
//
C函数执行OC中的OCSayHi方法   
[
OCpOCSayHi];
}


3在ViewDidLoad中调用C函数并且将函数self赋予全局函数指针
[java] viewplaincopy
-(void)viewDidLoad{   
[
super viewDidLoad];   
// Do anyadditional setup after loading the view.  
//函数指针指向自己   
OCp
= self   
//调用函数方法   
CSayHi
();
}

运行结果如下:2014-07-13 19:49:10.590C函数使用OC的方法[16750:60b] hi
成功得在函数中调用了OC的方
0 0