有的時候我們需要通過OC代碼的.h/.m文件膨桥,調(diào)用純C++的文件代碼中的方法钟哥。
若調(diào)用純c++的方法创肥,這個時候达舒,我們必須再次封裝一下值朋。通過調(diào)用中間層對象的方法,來調(diào)用c++的方法巩搏。
OC如何調(diào)用C++的.h/.cpp文件昨登,正常的OC文件(.h/.m)文件通過調(diào)用,過渡的.h/.mm文件,在此文件中調(diào)用了C++的源文件.h/.cpp文件贯底;回調(diào)即如此丰辣;即可實現(xiàn)正常調(diào)用和傳值實現(xiàn)。
此時使用的是 Objective-C++
編碼
是在OC文件和C++文件之間加一個橋梁禽捆,該橋接可以寫C++代碼也可以寫OC代碼笙什;同樣此道理我們可以知道,.mm文件也可以作為正常的在Xcode中使用的文件睦擂,書寫C++代碼和OC代碼一起寫得湘。
- OC調(diào)用C++
OC調(diào)用C++不需要借助輔助的其它文件作為過渡可以直接使用OC工程中源代碼實現(xiàn)C++的調(diào)用,具體實現(xiàn)步驟如下:
1. 更改需要調(diào)用C++方法的.m源文件顿仇,為.mm;--> ex: DrawingView.m ->DrawingView.mm
(這時的.mm源文件已經(jīng)同時具有可以編寫C++和OC語法的編譯源文件淘正。如#include || #import ; std::string || NSString)
2. 導入含有需要調(diào)用的C++方法的.h頭文件,然后聲明C++類;
#include "GameScene.h"
staic GameScene *gameScene = NULL;
3. 此時在更改為.mm的OC源文件中已經(jīng)可以實現(xiàn)正常的C++源文件的使用和方法的調(diào)用。
- C++ 調(diào)用OC
實現(xiàn)C++ 調(diào)用OC需要使用一個過渡的.mm文件實現(xiàn)C++語法對OC語法的成員方法和成員變量的正常調(diào)用臼闻。具體操作步驟如下:
1. 首先創(chuàng)建兩個.h和.m文件 --> 然后更改.m文件為.mm源文件鸿吆,讓其同時具備C++和OC的語法特性。
2. 然后開始在新的.h和.mm文件中寫入過渡的類和方法述呐。在.h文件中使用C++語法聲明一個C++類和可以實現(xiàn)調(diào)用OC的C++方法惩淳。如:
class helloOC{
public:
static void objcFormCBlockData(bool isWhetherClass);
};
3. .mm --> 在.mm文件中首先導入OC的#import <Foundation/Foundation.h>#import "... .h"頭文件
a. 使用OC語法聲明一個OC類;
@interface OCClass : NSObject
@end
@implementation OCClass
// 封裝一個方法用于視圖點擊后返回所需要改變數(shù)值
+ (void)getDataBlockFromC:(BOOL)isWhetherClasss
{
注: 這里必須保持使用類的唯一性即單例類乓搬,可以在OC類在創(chuàng)建時使用static 聲明這個類為后面方面獲取此類思犁。
[[DrawingView getInstanceOCClasss]getDataBlockFromOC:isWhetherClass];
}
@end
b. 同時在此.mm文件中聲明一個C++方法。
#pragma mark - C++方法用于給外部C++文件調(diào)用-->然后調(diào)用上面的OC類就可以把數(shù)據(jù)一步步傳出去橋接起來
void helloOC::objcFormCBlockData(bool isWhetherClasss)
{
[OCClass getDataBlockFromC:isWhetherClass];
}