Objective-C 与 C++ 互调笔记

本文详细介绍了如何在Objective-C与C++类间实现回调,解决无法实时获取IAP进度信息的问题。通过实现OC类作为C++类的回调代理,使用Notification来传递事件,最终实现C++类调用OC类的方法,优化了原有的回调机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天为了给Alex写一个IAP和Game Center的Demo, 整理了一下IAP的程序。之前只有C++ 调用OC的方法,没有反向调用,这样几个SKProductsRequestDelegate和SKPaymentTransactionObserver的事件就无法通知到主程序端,主程序端就不能实时得到IAP的进度信息。为了解决这个问题,必须实现OC类对C++的回调。

如果都是OC类,可以通过Notification来实现IAP一些相关事件如productRequest didReceiveResponse事件的回调,但现在是事件处理端是C++,所以Notification的方法似乎不可行。后来采用了一个傻办法,在OC类A的 头文件中声明一个delegate,然后在mm文件中定义一个OC类B来实现这个delegate,B的方法中再调用C++类D的方法, 在D的头文件中声明一个纯虚类I,加上几个回调的函数声明。在主程序端的C++类E里继承I并把自己的指针付给D,这样通过A-->B-->D-->E来实现回调,挺折腾的。

总之,就是在mm文件里实现OC与C++类的互相调用。

update: 上面的方法耦合的太紧了,换了一个简单的方法,在mm文件里实现一个OC单例类,创建时注册几个 notification, 而在 m 文件里SKProductsRequestDelegate或SKPaymentTransactionObserver 的回调方法里post  Notification。这样 mm文件的OC类收到Notification后再调用C++类的方法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值