我有一个C函数(音频队列服务中的回调函数),我想向自己发送消息。怎么做? 如果我输入[自我留言],则会出现错误:
Use of undeclared identifier 'self'
答案 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
参数,仅适用于此类事情(更好)或其他地方。