OC调用C++ || C++调用OC
2019-08-16 本文已影响0人
罂粟之城
有的时候我们需要通过OC代码的.h/.m文件,调用纯C++的文件代码中的方法。
若调用纯c++的方法,这个时候,我们必须再次封装一下。通过调用中间层对象的方法,来调用c++的方法。
OC如何调用C++的.h/.cpp文件,正常的OC文件(.h/.m)文件通过调用,过渡的.h/.mm文件,在此文件中调用了C++的源文件.h/.cpp文件;回调即如此;即可实现正常调用和传值实现。
此时使用的是 Objective-C++
编码
是在OC文件和C++文件之间加一个桥梁,该桥接可以写C++代码也可以写OC代码;同样此道理我们可以知道,.mm文件也可以作为正常的在Xcode中使用的文件,书写C++代码和OC代码一起写。
- OC调用C++
OC调用C++不需要借助辅助的其它文件作为过渡可以直接使用OC工程中源代码实现C++的调用,具体实现步骤如下:
1. 更改需要调用C++方法的.m源文件,为.mm;--> ex: DrawingView.m ->DrawingView.mm
(这时的.mm源文件已经同时具有可以编写C++和OC语法的编译源文件。如#include || #import ; std::string || NSString)
2. 导入含有需要调用的C++方法的.h头文件,然后声明C++类;
#include "GameScene.h"
staic GameScene *gameScene = NULL;
3. 此时在更改为.mm的OC源文件中已经可以实现正常的C++源文件的使用和方法的调用。
- C++ 调用OC
实现C++ 调用OC需要使用一个过渡的.mm文件实现C++语法对OC语法的成员方法和成员变量的正常调用。具体操作步骤如下:
1. 首先创建两个.h和.m文件 --> 然后更改.m文件为.mm源文件,让其同时具备C++和OC的语法特性。
2. 然后开始在新的.h和.mm文件中写入过渡的类和方法。在.h文件中使用C++语法声明一个C++类和可以实现调用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
// 封装一个方法用于视图点击后返回所需要改变数值
+ (void)getDataBlockFromC:(BOOL)isWhetherClasss
{
注: 这里必须保持使用类的唯一性即单例类,可以在OC类在创建时使用static 声明这个类为后面方面获取此类。
[[DrawingView getInstanceOCClasss]getDataBlockFromOC:isWhetherClass];
}
@end
b. 同时在此.mm文件中声明一个C++方法。
#pragma mark - C++方法用于给外部C++文件调用-->然后调用上面的OC类就可以把数据一步步传出去桥接起来
void helloOC::objcFormCBlockData(bool isWhetherClasss)
{
[OCClass getDataBlockFromC:isWhetherClass];
}