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方法


分享到:


相關文章: