美文网首页
一种纯粹的C++回调OC函数/方法的方式

一种纯粹的C++回调OC函数/方法的方式

作者: 非夜 | 来源:发表于2020-06-26 23:01 被阅读0次

    起因

    因为在做跨端SDK,语言用的C++,想尽量把C++代码和OC代码解耦,OC调用C++倒是简单,改个源文件的名字为.mm就可以了,C++调OC确定用函数指针,补了下函数指针和函数指针在C++中做入参的知识就写了这样一个简单的Demo,整体是现是:函数指针结合OC的NSNotificationCenter

    上代码

    OC部分

    xx.mm

    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
        CppInterface * ci = CppInterface::getInstance();
        void (*func)(const char *);
        func = c2oc;
        ci->handlerEvent("c string", func);
    }
    
    void c2oc(const char * value) {
        [[NSNotificationCenter defaultCenter] postNotificationName:@"c2oc" object:nil userInfo:@{@"name": @(value)}];
    }
    
    - (void)cCallbacy:(NSNotification *)info {
        NSLog(@"from c name is %@ \n", info.userInfo[@"name"]);
    }
    
    

    C++部分

    CppInterface.hpp

    #ifndef CppInterface_hpp
    #define CppInterface_hpp
    
    #include <stdio.h>
    
    using namespace std;
    
    class CppInterface {
    public:
        CppInterface();
        ~CppInterface();
        static CppInterface * getInstance();
        void handlerEvent(const char * name, void (*func)(const char *));
    };
    
    #endif /* CppInterface_hpp */
    

    CppInterface.cpp

    #include "CppInterface.hpp"
    
    CppInterface::CppInterface(){
    }
    
    CppInterface::~CppInterface(){
    }
    
    void CppInterface::handlerEvent(const char * name, void (*func)(const char *)){
        (*func)(name);
    }
    
    CppInterface * CppInterface::getInstance() {
        return new CppInterface();
    }
    

    log

     from c name is c string
    

    别忘了手动释放C++的对象

    相关文章

      网友评论

          本文标题:一种纯粹的C++回调OC函数/方法的方式

          本文链接:https://www.haomeiwen.com/subject/rmdpfktx.html