【问题标题】:How to get data from c function to cocoa(objective c) function如何从 c 函数获取数据到 cocoa(objective c) 函数
【发布时间】:2012-01-24 06:50:50
【问题描述】:

我正在使用CFMessagePortRef 进行进程间通信。对于接收数据,我有回调方法

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

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

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
}

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

【问题讨论】:

    标签: objective-c cocoa variables macos-carbon


    【解决方案1】:

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

    注意内存管理。如果self 在回调之前被释放,你会在释放它时崩溃。请务必删除您在dealloc 中的回调注册,以免发生这种情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多