【发布时间】:2011-03-31 16:23:38
【问题描述】:
音频队列回调函数必须是 C 风格的函数吗?或者它可以是一个客观的 C 风格的方法?
【问题讨论】:
标签: iphone objective-c c core-audio audioqueueservices
音频队列回调函数必须是 C 风格的函数吗?或者它可以是一个客观的 C 风格的方法?
【问题讨论】:
标签: iphone objective-c c core-audio audioqueueservices
完全依赖于 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];
}
我建议您在设置回调时使用retainself,并仅在您拆除回调时使用release 平衡它。
【讨论】:
CoreAudio(包括 AudioQueueServices)没有 ObjectiveC 接口 - 纯 C 是直接与 CoreAudio 接口的答案。
但是,您可以创建一些调用单例 ObjectiveC 对象方法的包装 C 函数。
【讨论】: