c++與oc混編之c++中調(diào)用oc方法

  • 項(xiàng)目中用到了C++與OC混編,正好有時(shí)間來(lái)總結(jié)一下.

  • 基本思路: C++中是不能直接調(diào)用OC代碼的,所以要通過(guò)一個(gè)中介--C,來(lái)讓他們建立聯(lián)系,從而實(shí)現(xiàn)在C++中調(diào)用OC代碼.

1.新建C++文件

  • Xcode會(huì)自動(dòng)生成.hpp和.cpp的默認(rèn)文件(由于Xcode不需要手動(dòng)編譯鏈接,因此寫到.hpp和.cpp中沒有差別,以下默認(rèn)寫到.hpp中)
新建hpp文件.png

2.在.hpp中實(shí)現(xiàn)如下代碼(TestObject.hpp)

public:
void testFunction(int temp){
        c_testFunction(temp);
}
  • tips:如果是重載方法,需要在函數(shù)名后面加override ("如 void init() override ")

3. 創(chuàng)建.mm文件(LNTestObject.mm)

  • 在.mm中寫C實(shí)現(xiàn)并調(diào)用OC方法
//C中不能直接使用self來(lái)調(diào)用OC方法,這里使用單例創(chuàng)建對(duì)象(調(diào)用方法前需要先創(chuàng)建單例)
static LNTestObject*testObject =nil;
+ (instancetype)shareInstance{
  static dispatch_once_t onceToken;
  dispatch_once(&onceToken, ^{
    testObject = [[self alloc] init];
  });
  return testObject;
}

//C實(shí)現(xiàn)
void c_testFunction(int temp){
  [testObject c_testFunction:temp];
}

//OC實(shí)現(xiàn)
- (void)c_testFunction:(int)temp{
  NSLog(@"temp=%zd",temp);
}

4.創(chuàng)建橋接文件并在.hpp中include(TestObject-C-Interface.h)

  • 目的是讓.hpp中c++方法能找到對(duì)應(yīng)c的方法
//聲明實(shí)現(xiàn)的C方法
void c_testFunction(int temp);
  • 最后需要注意的:根據(jù)編譯器特性,LNTestObject.mm 中實(shí)現(xiàn)的C方法不必再LNTestObject.h中再聲明

github demo 地址: https://github.com/KrystalNa/oc-c-demo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鸣峭,一起剝皮案震驚了整個(gè)濱河市青柄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖凡纳,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件燥筷,死亡現(xiàn)場(chǎng)離奇詭異刁卜,居然都是意外死亡蠢正,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門彻消,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)竿拆,“玉大人,你說(shuō)我怎么就攤上這事宾尚”瘢” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵煌贴,是天一觀的道長(zhǎng)御板。 經(jīng)常有香客問(wèn)我,道長(zhǎng)牛郑,這世上最難降的妖魔是什么怠肋? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮淹朋,結(jié)果婚禮上灶似,老公的妹妹穿的比我還像新娘。我一直安慰自己瑞你,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布希痴。 她就那樣靜靜地躺著者甲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪砌创。 梳的紋絲不亂的頭發(fā)上虏缸,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天鲫懒,我揣著相機(jī)與錄音,去河邊找鬼刽辙。 笑死窥岩,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的宰缤。 我是一名探鬼主播颂翼,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼慨灭!你這毒婦竟也來(lái)了朦乏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤氧骤,失蹤者是張志新(化名)和其女友劉穎呻疹,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體筹陵,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡刽锤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了朦佩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片并思。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖吕粗,靈堂內(nèi)的尸體忽然破棺而出纺荧,到底是詐尸還是另有隱情,我是刑警寧澤颅筋,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布宙暇,位于F島的核電站,受9級(jí)特大地震影響议泵,放射性物質(zhì)發(fā)生泄漏占贫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一先口、第九天 我趴在偏房一處隱蔽的房頂上張望型奥。 院中可真熱鬧,春花似錦碉京、人聲如沸厢汹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)烫葬。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間搭综,已是汗流浹背垢箕。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留兑巾,地道東北人条获。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蒋歌,于是被迫代替她去往敵國(guó)和親帅掘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容