Objective C++实现回调函数

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

下面为大家介绍一下在Objective C++中怎么样去实现回调,大家都知道Object C 与 C++ 混编的时候,是不能用Cocoa 自带的委托机制来实现回调的。比如在做一些多平台的项目时,由于接口是c++编写的,这个时候你要怎么样去将接口函数里的数据传递到你Object C编写的对象中去呢。最简单的方法就是使用ios消息机制-Notification,来传递从接口中收到的数据。但如果这个时候接口很多,那你就要注册很多的Notifications,就会导致程序的开销很大,后果你懂的。

转入正题,我要介绍的方法就是用函数指针实现回调。咱们先看个简单的例子

1.先在项目里添加一个c++的类,记得把.m文件改成.mm,这样才会支持对c++的编译

CallBackHandler.h文件

// 定义函数指针类型
typedef void (*MessageHandler)(void *userData,const char *msg);

class CallBackHandler 
{

public:
    CallBackHandler();
    ~CallBackHandler();
    
    // 处理回调的函数
    void handleInformation(const char* info);
    
    // 注册回调的函数
    void registerCallBackFunction(void *,MessageHandler);
    
private:
    
    // 要实现这个回调的对象
    void *userData;
    
    // 函数声明
    MessageHandler messageHandler;
    
};


Unity3D在IOS、Android上使用C++并回调的究极解决方案 各种方法在各种平台下的总结如下:1、在VS中使用CLR C++工程,编译产生.dll,放入Plugins在Windows、OSX、Android上试验成功, IOS上试验失败,报的错貌似与il2cpp有关。不过CLR C++的语法与正常C++稍有不同。2、直接在Plugins中放入.cpp文件在IOS上试验成功,Android上未知, Windows、OSX上不行3、编译出目标平台的.a或.so 阅读详情

相关推荐

C++ SDK提供回调函数接口给Android/iOS 集成

C++如何提供跨平台的回调函数接口是业务开发很常遇到的需求,但是实际上公开的资料都很杂乱,而且不一定正确,因此在此文章中,以Android Java和iOS Swift为例,系统化说明一下如何制作一个跨平台C++回调函数接口。

weixin_44491772的博客 858

[iOS]Objective-C利用协议实现回调函数(类似java的回调函数

NULL 博文链接:https://z251257144.iteye.com/blog/1331507

OC\C++实现回调

Object C 与 C++ 混编的时候,是不能用Cocoa 自带的委托机制来实现回调的。比如在做一些多平台的项目时,由于接口是c++编写的,这个时候你要怎么样去将接口函数里的数据传递到你Object C编写的对象中去呢。最简单的方法就是使用ios消息机制-Notification,来传递从接口收到的数据。但是接口过多,注册太多Notifications,就会导致程序的开销很大。这个时候,选择函数指针实现回调,既可以实现功能,又可以减少系统开销。 例子: CallBac...

程序猿老樊的博客 1467

ios 传入c 代码回调的使用

情况就是objective-c 调用c 并且要把数据回传到objective-c 的标准使用方法: 定义回调函数,回调里边void*context int count 用于传入objective 对象,后边是回调的内容。 所以回调函数可以写成 typedef  int   (*Player_Callback)(void *opaque, int message, void *data

yangzm的专栏 758

C/C++回调函数初探

<br />什么是回调函数?<br />简而言之,回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。<br />为什么要使用回调函数?<br />因为可以把调用者与被调用者分开。调用者不关心谁是被调用者,所有它需知道的,只是存在一个具有某种特定原型、某些限制条件(如返回值为int)的被调用函数。<br />如果想知道回调函数在实际中有什么作用,先假设有这样一种情况,我们要编写一个库,它提供了某些排序算法的实

Gary's Blog --- A C++ programmer 1260

回调函数的使用

在oc中,我都是使用块函数的方法来传递参数和事件调用,在C++也可以使用回调函数实现 TestClass.h #pragma once struct dlgStruct { void* pObj; int pos; }; typedef void WaitFunc(int a); typedef void dlgFunc(dl...

weixin_30765577的博客 90

object-c 回调函数

回调函数 Java和C++编程中都常用到回调函数 对象A具有某些接口 对象B实现这些接口并由对象A在某个时机调用实现的接口 C++:纯虚函数实现 class test { public: virtual void call()=0; }; class child : public test { void call() { cout &lt;&lt; "ch...

sliver.chen的博客 1185

OC代码调用C++代码的回调函数步骤

http://hi.baidu.com/52study/item/82ed1838b96725b7b80c033f?connect=qzone 1、C++代码中的回调函数C++的头文件中声明回调函数,如typedefvoid(*OnCompleteCallback)(constchar*code,boolflag); 2、C++代码中的结构体 在C++的头文件中声明一...

weixin_34209851的博客 440

[计算机基础]回调函数

参考:维基百科 回调函数,简称回调,是指主函数调用一个函数,当被调用函数运算结束后,会返调用主函数(或者主函数提供的与之同设计层的函数) 回调函数实现: 回调的形式不同程序设计语言不同。 C/C++:通常使用函数指针实现回调 Object-C:@selector关键字传递函数入口 C#:使用类型安全的'委托'对函数入口进行封装 JAVA:使用抽象类或者接口实现相互调...

weixin_33841503的博客 228

OC与C++的回调处理

经常遇到上层是OC部分,下层是C++部分的结构.这样就会遇到OC调用C++部分,C++回调OC的部分.以下是相关的示例.  此示例    部分1 是OC通过域名空间调用了C++接口,也避免了new对象.这部分很简单,看下loginWithUserName接口.   部分2是描述了C++回调OC部分.这里要说下为什么要使用libMananger单例.原因之一是模块化了,当然更重要的是在stat

nogodoss的专栏 5434

关于C++ 将lambda表达式作为参数传递

https://blog.csdn.net/register_man/article/details/71330743 项目里面用到lambda,需要穿参数,看了这篇博文,便动手试了试。 先定义一个typedef void (^responsefunc)(Poco::Net::HTTPResponse::HTTPStatus result, const string&amp; response...

tankweight的博客 3882

cocos2d html5 移动精灵,如何移动一个cocos2d-x精灵

void addTarget()函数将会帮我们完成这一工作,敌人将会以随机的速度,从游戏场景左移动到右。在HelloWorldScence.h里声明void addTarget(),并在HelloWorldScene.cpp里添加以下的代码,(请不要忘记在HelloWorldScene.cpp的开头加入using namespace cocos2d)1// cpp with cocos2d-x...

weixin_39638859的博客 194

cocos2d 转 cocos2d-x 学习笔记(二)

要点: 关于随机函数:srand和rand是C标准库函数,对每个平台来说,可以获取毫秒级时间来产生随机数 沃Phone: srand(TimGetTicks()); iOS: arc4random(); 这个可以直接用 其他: srand((unsigned)time(NULL)); 布尔型: Object-c -> C++ YES -...

weixin_30569033的博客 100

札记

option optimize_for = LITE_RUNTIME;  由于我们在mymessage文件中的定义选项optimize_for的值为LITE_RUNTIME,因此由该.ptroto文件生成的所有C++类的父类均为::google::protobuf::MessageLite,而非::google::protobuf::Message 序列化的两步:1)使用数据填充数据结构,无论

Xcocode_ios的专栏 519

C++教程之lambda表达式一

什么是Lambda? C++ 11加入了一个非常重要的特性——Lambda表达式。营里(戴维营)的兄弟都对Objective-C很熟悉,许多人多block情有独钟,将各种回调函数、代理通通都用它来实现。甚至有人选择用FBKVOController、BlocksKit等开源框架将KVO、控件事件处理都改为通过block解决。原因就是简单、方便、直观,函数的定义和使用出现在同一个地方。这里的La

戴维营教育 1179

iOS 匿名函数

文章目录 一、匿名函数基本知识 1、C 语言函数的定义 2、GO 语言中匿名函数 二、OC 中的匿名函数 1、Block 定义 2、Block 类型的变量 3、Block 作为参数传递 4、Block 作为返回值 三、Block 实现 1、实质 2、 ...

风中的劲草 1321

iOS中block实现的探究

[0. Brief introduction of block] Block是iOS4.0+ 和Mac OS X 10.6+ 引进的对C语言的扩展,用来实现匿名函数的特性。 用维基百科的话来说,Block是Apple Inc.为C、C++以及Objective-C添加的特性,使得这些语言可以用类lambda表达式的语法来创建闭包。 用Apple文档的话来说,A block i

Bob的专栏 378

Objective-C利用协议实现回调函数

在编写iphone开发时,最常用的就是回调函数。自己编写回调函数实现动态加载数据,加载完数据之后就利用回调函数通知给前台页面,显示相应数据的界面。在iphone中利用协议可以很容易的实现回调函数,后台加载数据,然后显示在前台页面. 下面举个通俗的例子:    某天,我打电话向你请教问题,当然是个难题,^_^,你一时想不出解决方法,我又不能拿着电话在那里傻等,于是我们约定:等你

IOS -Step by step 2543
上一篇: 无线网卡(Broadcom Corporation BCM4312)的安装
shawben
博客等级 码龄17年 4粉丝 2原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值