iOS音频会话初始化错误

iOS音频会话初始化错误,ios,audiosession,Ios,Audiosession,我正在编写一个使用音频队列的iPad应用程序。由于多次调用AudioSessionInitialize,我遇到了一个错误。我试图找到一种方法来测试是否已经调用AudioSessionInitialize来避免这种情况,但到目前为止还没有成功。有人有办法做到这一点吗 高级版谢谢。您只需将其包装在dispatch\u once块中,如下所示: static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ AudioSes

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


高级版谢谢。

您只需将其包装在dispatch\u once块中,如下所示:

static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    AudioSessionInitialize(NULL, NULL, InterruptionListenerCallback, clientData);
    // Perform other setup here...
});
尽管从长远来看,您可能会发现使用会话的隐式初始化和通过代理处理事件更容易,如下所述:


您可以将其包装在dispatch\u once块中,如下所示:

static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    AudioSessionInitialize(NULL, NULL, InterruptionListenerCallback, clientData);
    // Perform other setup here...
});
尽管从长远来看,您可能会发现使用会话的隐式初始化和通过代理处理事件更容易,如下所述:


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

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