音频队列回调函数是否必须是C样式函数?或者它可以是一个客观的C风格方法?

Dar*_*lay 4 c iphone objective-c core-audio audioqueueservices

音频队列回调函数是否必须是C样式函数?或者它可以是一个客观的C风格方法?

bbu*_*bum 7

完全取决于API; 如果API调用函数,块或方法,那么您必须使用它.

只要回调函数类型是这样的:

void (*hollabackman)(AudioGunk*foo, void*context);
Run Code Online (Sandbox Code Playgroud)

用于设置回调的API类似于:

setCallback(hollabackman func, void *context);
Run Code Online (Sandbox Code Playgroud)

然后你可以:

- myMethod
{
    setCallback(&myCallbackFunc, (void *)self);
}

- (void) hollaedBack: (AudioGunk*) aGunk
{
.....
}
Run Code Online (Sandbox Code Playgroud)

然后:

void myCallbackFunc(AudioGunk *foo, void *context)
{
    MyClass *self = (MyClass *) context;
    [self hollaedBack: foo];
}
Run Code Online (Sandbox Code Playgroud)

我建议你retain在设置回调时自我,并release在你拆除回调时只用它来平衡它.