我正在编写一个使用音频队列的iPad应用程序。我遇到多次调用音频会话初始化导致的错误。我正在尝试找到一种方法来测试是否已经调用了 AudioSessionInitialize 以避免这种情况,但到目前为止还没有运气。有人有办法做到这一点吗?
提前谢谢。
您可以
按照以下方式将其包装在dispatch_once块中:
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
AudioSessionInitialize(NULL, NULL, InterruptionListenerCallback, clientData);
// Perform other setup here...
});
尽管从长远来看,您可能会发现使用会话的隐式初始化并通过委托处理事件更容易,如下所述:
音频会话编程指南 - 初始化音频会话
由于音频会话当前是全局属性,因此您可以在初始化时设置 C 全局变量标志,然后在尝试(重新)初始化之前检查此全局变量。 但是,如果您的应用是多线程的,则dispatch_once块不太可能产生争用条件错误。