0

我正在编写一个使用音频队列的 iPad 应用程序。我遇到了由于多次调用 AudioSessionInitialize 而导致的错误。我正在尝试找到一种方法来测试是否已经调用了 AudioSessionInitialize 以避免这种情况,但到目前为止还没有运气。有没有人有办法做到这一点?

先谢谢了。

4

2 回答 2

2

您可以按照以下方式将其包装在 dispatch_once 块中:

static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    AudioSessionInitialize(NULL, NULL, InterruptionListenerCallback, clientData);
    // Perform other setup here...
});

尽管从长远来看,您可能会发现使用会话的隐式初始化并通过委托处理事件更容易,如下所述:

音频会话编程指南 - 初始化您的音频会话

于 2012-06-23T13:23:36.880 回答
1

由于音频会话当前是一个全局属性,您可以在初始化时设置一个 C 全局变量标志,然后在尝试(重新)初始化之前检查这个全局变量。但是,如果您的应用程序是多线程的,则 dispatch_once 块不太可能引发竞争条件错误。

于 2012-11-02T20:41:31.830 回答