C函数调用OC方法

从汇编角度来看: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的方
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值