2

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

Use of undeclared identifier 'self'
4

2 回答 2

4

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

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

void SomeCallback(t_stuff* const stuff, void* userInfo) {
  MONClass * Self = (MONClass*)userInfo;
  [Self doSomething];
}
于 2012-04-30T04:56:52.977 回答
3

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

于 2012-04-30T04:56:22.480 回答