05.07 Xcode中OC、C++混编之c++中调用oc方法

Objective-C和C++混编的关键在 Objective-C++中,能够用C++代码调用措施也能够从Objective-C调用措施。在这两种语言里对象都是指针,能够在任何地方利用。今天小编给大家带来Xcode中OC、C++混编之C++中调用OC方法

作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要这是一个我的iOS交流群:687528266,点击链接加入群聊【iOS软件开发学习交流】:https://jq.qq.com/?_wv=1027&k=5wrTEZx不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!

.m文件:是OC的源代码

可以写OC、C源代码

obj c 完全兼容 C

.mm文件:OC与C++混编的代码

可以写OC,C++和C代码。

在谷歌室内地图v2.2.0中使用到.mm文件

Xcode中OC、C++混编之c++中调用oc方法

为什么要使用C++混编

1.需要使用工具库或者源码是C++的

2.C++执行效率快

3.跨平台

C++与OC混编的C++中调用OC方法

1.项目中用到了C++与OC混编,正好有时间来总结一下.

2.基本思路: C++中是不能直接调用OC代码的,所以要通过一个中介--C,来让他们建立联系,从而实现在C++中调用OC代码.

1.新建C++文件

Xcode会自动生成.hpp和.cpp的默认文件(由于Xcode不需要手动编译链接,因此写到.hpp和.cpp中没有差别,以下默认写到.hpp中)

Xcode中OC、C++混编之c++中调用oc方法

2.在.hpp中实现如下代码(TestObject.hpp)

public:voidtestFunction(inttemp){ c_testFunction(temp);}

tips:如果是重载方法,需要在函数名后面加override ("如 void init() override ")

3. 创建.mm文件(LNTestObject.mm)

在.mm中写C实现并调用OC方法

Xcode中OC、C++混编之c++中调用oc方法

4.创建桥接文件并在.hpp中include(TestObject-C-Interface.h)

目的是让.hpp中c++方法能找到对应c的方法

voidc_testFunction(inttemp);

最后需要注意的:根据编译器特性,LNTestObject.mm 中实现的C方法不必再LNTestObject.h中再声明


那何谓混编

混编就是同一个项目中使用不同的编程语言写代码,然后做个桥梁调用彼此

ObjectiveC 与 C++ 的共同点这里就不用多说了,知道它们都向下兼容C语言足以

文章开头.m .cpp文件在不混编的情况下存在是正常的,但是要把这两者都兼容,譬如两者调用,就需要.mm文件,所有语言的桥接代码源文件都是.mm 其实就是相当于.cpp

Xcode中OC、C++混编

前景:如果.h全都是C++的写法,没有问题,如果.h全都是OC的写法,没有问题,如果.h里面有C++又有OC那就有问题(.h中引入的其他头文件也算在内),所以写到.m中吧

attention:只需要将.m改成.mm Xcode即可识别(简单到amazing)

混编还是超级简单,还是了解一下原理比较好

混编注意

在一个项目里使用两种语言,不同的语言差异性还是很大,混乱使用,要跟多的注意处理方式

header文件没有后缀名变化,没有.hh文件。

Objective-C向下完全兼容C,C++也是,有时候也可以使用void *指针做桥梁。

写有不足的地方,可以联系晓雯的微信。请各位大佬多多指教!!! QQ:3366458405 微信:Pingwen20

(其实做为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS学习交流群687528266,不管你是小白还是大牛欢迎入驻,大家一起交流学习,加群私聊群主就可以领取2018最全梳理的面试宝典和资料)以及下图这份资料,希望你能找到理想中的工作

Xcode中OC、C++混编之c++中调用oc方法


分享到:


相關文章: