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++的调用,具体实现步骤如下:

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需要使用一个过渡的.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];   
    }
上一篇 下一篇

猜你喜欢

热点阅读