如何在obj-C中的C函数中向self发送消息?

时间:2012-04-30 04:50:17

标签: objective-c ios audioqueueservices

我有一个C函数(音频队列服务中的回调函数),我想向自己发送消息。怎么做? 如果我输入[自我留言],则会出现错误:

Use of undeclared identifier 'self'

2 个答案:

答案 0 :(得分:4)

您不会在实时回调中执行objc消息,例如音频。原因是objc消息传递不是恒定时间,并且可能会锁定,导致错过最后期限,从而导致音频辍学。静态或动态(virtual)C ++调用和C函数调用当然是恒定时间,适用于实时上下文。

如果它不是实时/音频回调,那么一个选项就是将self作为用户信息或上下文参数传递:

void SomeCallback(t_stuff* const stuff, void* userInfo) {
  MONClass * Self = (MONClass*)userInfo;
  [Self doSomething];
}

答案 1 :(得分:3)

self仅在类定义的上下文中有意义 - 它是指向该类实例的指针。函数不是任何类的一部分,因此没有self指针。如果您希望回调能够向给定对象发送消息,则需要存储指向回调可以找到它的对象的指针。这可能是一个全局变量(ick),一个userInfo参数,仅适用于此类事情(更好)或其他地方。