gpt4 book ai didi

objective-c - 如何从c函数获取数据到cocoa(objective c)函数

转载 作者:行者123 更新时间:2023-12-03 17:15:12 24 4
gpt4 key购买 nike

我使用 CFMessagePortRef 进行进程间通信。为了接收数据,我有回调方法

CFDataRef didReceiveDataFromOtherProcess(CFMessagePortRef local,SInt32 msgid,CFDataRef data,void *info)

现在我想将接收到的数据发送到我的主 Controller 。我可以在 didReceiveDataFromOtherProcess 中创建主 Controller 对象并将数据发送到主 Controller ,但我想编写通用消息传递模块。我无法在回调函数中访问实例变量,委托(delegate)在这种情况下不起作用,因此我定义了 -(void)saveObject:(id)object 方法并将主 Controller 的对象保存在全局变量中。

messagePassing *object = [[messagePassing alloc]init];
[object saveObject:self]; //in main controller

//in messagePassing
-(void)saveObject:(id)object
{
globalObject = object;
}

CFDataRef didReceiveDataFromOtherProcess(CFMessagePortRef local,SInt32 msgid,CFDataRef data,void *info)
{
//....
[globalObject didReceivedData:(id)data]; // sending to main controller
}

但是在这种情况下;如果我打开两个连接,它将更改我的全局对象。
谁能帮帮我吗?

最佳答案

这就是info 的用途。设置回调时,将 self 作为 info 指针传递。然后在回调中取消引用它,以便您可以与原始对象进行通信。

小心内存管理。如果 self 在回调之前被释放,那么释放它时就会崩溃。请务必在 dealloc 中删除您的回调注册,这样就不会发生这种情况。

关于objective-c - 如何从c函数获取数据到cocoa(objective c)函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8983020/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com