C 函数指针 在OC中应用
2015-10-23 11:38
204 查看
**
1.底层SDK中的一段代码
2.在OC中设置这个函数指针:
3.通过广播接收者来为OC实例设置参数
总结:c代码快中不能访问当前已经实例化OC的实例,但是可以访问静态类方法,所以这里我用了NSUserDefaults 和 NSNotificationCenter作为信息传输的媒介。
运用场景:一些使用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作为信息传输的媒介。
相关文章推荐
- 关于指针的一些事情
- Mootools 1.2教程 函数
- autoit InputBox 函数
- 文件遍历排序函数
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- ASP下经常用的字符串等函数参考资料
- PostgreSQL教程(五):函数和操作符详解(1)
- DOS批处理 函数定义与用法
- asp Chr 函数 数字转字母的方法
- Lua中的函数精讲笔记
- Lua中的闭合函数、非全局函数与函数的尾调用详解
- Lua中调用C++函数示例
- Lua实现split函数
- Lua常用时间函数使用实例
- Lua函数与字符串处理简明总结
- Lua学习笔记之表和函数
- Lua中实现sleep函数功能的4种方法
- Lua函数用法研究
- Lua基础教程之赋值语句、表达式、流程控制、函数学习笔记
- PowerShell函数简明教程