4

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

4

2 回答 2

7

完全依赖于 API;如果 API 调用函数、块或方法,那是您必须使用的。

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

void (*hollabackman)(AudioGunk*foo, void*context);

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

setCallback(hollabackman func, void *context);

那么你也能:

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

- (void) hollaedBack: (AudioGunk*) aGunk
{
.....
}

然后:

void myCallbackFunc(AudioGunk *foo, void *context)
{
    MyClass *self = (MyClass *) context;
    [self hollaedBack: foo];
}

我建议您retain在设置回调时自行设置,并且仅release在您拆除回调时将其与 a 平衡。

于 2011-03-31T16:31:16.730 回答
1

CoreAudio(包括 AudioQueueServices)没有 ObjectiveC 接口——纯 C 是直接与 CoreAudio 接口的答案。

但是,您可以创建一些调用单例 ObjectiveC 对象方法的包装 C 函数。

于 2011-03-31T16:32:39.850 回答