从汇编角度来看: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 方法
[ OCp OCSayHi ];
}
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的方
区别:
C函数调用直接通过 函数名(参数)找到函数指针 直接执行函数地址,不需要考虑其他问题,只要定义好
OC 是属于类的方法,结构上多了一层封装性,要调方法必须要找到 类的地址然后再通过类的地址找到方法的地址,然后再执行函数地址。
那么:如何能够在C函数里面调用OC的方法呢?
答案就是:指定一个全局变量来保存类的地址,在通过类的地址找到类方法(函数)的地址调用。
1首先新建工程在加入一个ViewController
[java]
#import
//1 定义一个全局指针变量用于保存当前类的地址 MainController
@interface
@end
2在内部分别定义一个C函数和一个OC方法
[java]
// 定义一个 OC 方法 -( void )OCSayHi{
NSLog ( @"hi" );
}
// 定义一个 C 函数
void CSayHi(){
// 让 C 函数执行 OC 中的 OCSayHi 方法
[ OCp OCSayHi ];
}
3在ViewDidLoad中调用C函数并且将函数self赋予全局函数指针
[java]
-( 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的方