iOS C与OC文件桥接
抛出问题
啥是桥接?桥一样的链接。。。。言简意赅。。。对于大部分做iOS的同仁来说,OC免不了与C语言进行打交道,可是C与OC属于两种不同的语言,怎么进行相互调用呢?这个时候,桥接便产生了!在平时开发中,我们会遇到__bridge,对就是这个__bridge,你会发现可以解决很大的问题,但是仔细观察你会发现:__bridge是用来进行C与OC之间名称转换(类型)的。那么问题就来了:如果我们的需求是C与OC之间进行方法桥接,即C语言去调用OC的方法。啥?C语言还想调用OC的方法,你不是在说梦话吧?思考ing。。。。。
关于__bridge的用法,贴出来几个连接,大家可以参考一下!
iOS中的自由桥接http://www.cnblogs.com/crazypebble/p/3381260.html
iOS关于桥接http://www.jianshu.com/p/8993143d4d05
iOS设计模式-桥接 http://www.cnblogs.com/YouXianMing/p/4681186.html
解决问题
不知道各位想明白了没有,C如何去调用OC的方法?这个时候桥接便发挥了巨大的作用,此处所说的桥接不是__bridge,而是桥接工具类。具体实现如下:
第一步:创建一个工具类:(NSObject类,假如类名为:BridegUtil)
此时你会得到两个文件:BridegUtilB.h和BridegUtil.m。如图:
BridegUtilB.h
Paste_Image.png
BridegUtil.m
Paste_Image.png
第二步:将这两个OC文件改造成C能直接访问的文件,由于C中不存在@interface、#import <Foundation/Foundation.h>等一系列内容,所以删除类似的内容,得到如下图所示:
BridegUtilB.h
Paste_Image.png
BridegUtil.m
Paste_Image.png
可以发现.m文件中保留了对头文件的引用,第一点这毕竟是一个OC文件,引用头文件(C中采用#include引用)无可厚非,另外#import包含了#include功能。
第三步:添加函数声明以及函数实现
BridegUtilB.h
Paste_Image.png
BridegUtil.m
Paste_Image.png
第四步:在C语言的c文件中导入BridegUtilB.h(采用#include),并在对应的地方调用BridegUtilB.h中声明的方法。
导入头文件
Paste_Image.png
调用BridegUtilB.h中的方法
Paste_Image.png第五步:测试ViewController中的方法是否调用。
在ViewController中声明并实现了testBridge方法。打断点测试:
Paste_Image.png发现方法得到了调用,那么C与OC的桥接便得到了实现。