您的位置:首页 > 其它

C 函数指针 在OC中应用

2015-10-23 11:38 204 查看
**

运用场景:一些使用C/C++写的SDK中,有时候会要求传入一个函数指针,底层调用这个函数指针指向的函数来达到传参的目的。

**

1.底层SDK中的一段代码

//定义函数指针类型:int(*)(const int, const int, const int)
typedef int (*VideoCallBack)(const int msg1, const int msg2, const int msg3);

-(void)setVideoCallBack:(VideoCallBack)cblock;

//调用传入的函数指针指向的函数,向这个函数传入三个int类型数据
int resultInt = cblock(200, 200, 200);


2.在OC中设置这个函数指针:

//设置函数指针
[sdkNAME setVideoCallBack:ccFunction];

//在OC中写一个int(*)(const int, const int, const int)类型的C函数
int ccFunction(const int para1, const int para2, const int para3){
int sum = para1 + para2 + para3;
NSLog(@"收到的三个参数总和:%d", run);
NSString *message = [NSString stringWithFormat:@"%d", run];

//存起来,因为c函数中不能访问到OC的实例
NSUserDefaults *userdefaults = [NSUserDefaults standardUserDefaults];
[userdefaults setObject:message forKey:@"C_MESSAGE"];
[userdefaults synchronize];

//发送广播给MSG接收者
[[NSNotificationCenter defaultCenter] postNotificationName:@"CMSG" object:nil userInfo:nil];

//返回一个int到SDK中
return run;
}


3.通过广播接收者来为OC实例设置参数

//注册广播接收
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationAction) name:@"CMSG" object:nil];

- (void)notificationAction{

NSUserDefaults *userdefaults = [NSUserDefaults standardUserDefaults];
NSString *message = [userdefaults objectForKey:@"C_MESSAGE"];

NSLog(@"++++ %@ ++++", message);
self.titleView.text = message;

}


总结:c代码快中不能访问当前已经实例化OC的实例,但是可以访问静态类方法,所以这里我用了NSUserDefaults 和 NSNotificationCenter作为信息传输的媒介。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  函数 指针