我有一个 C 函数(音频队列服务中的回调函数),我想向自己发送消息。怎么做?如果我输入 [self message],则会出现错误:
Use of undeclared identifier 'self'
我有一个 C 函数(音频队列服务中的回调函数),我想向自己发送消息。怎么做?如果我输入 [self message],则会出现错误:
Use of undeclared identifier 'self'
您不会在实时回调中执行 objc 消息,例如音频。原因是 objc 消息传递不是恒定时间,可能会锁定,从而导致错过截止日期,从而导致音频丢失。静态或动态 ( virtual
) C++ 调用和 C 函数调用当然是常数时间,并且适用于实时上下文。
如果它不是实时/音频回调self
,那么一种选择是作为用户信息或上下文参数传递:
void SomeCallback(t_stuff* const stuff, void* userInfo) {
MONClass * Self = (MONClass*)userInfo;
[Self doSomething];
}
self
仅在类定义的上下文中才有意义——它是指向该类实例的指针。函数不属于任何类,因此没有self
指针。如果您希望您的回调能够向给定对象发送消息,则需要将指向该对象的指针存储在您的回调可以找到它的位置。这可能是一个全局变量(ick),一个userInfo
仅用于此类事情的参数(更好),或者其他地方。