Audio Queue を使用する iPad アプリを作成しています。AudioSessionInitialize を複数回呼び出した結果、エラーが発生しました。これを回避するために AudioSessionInitialize が既に呼び出されているかどうかをテストする方法を見つけようとしていますが、今のところうまくいきません。誰にもこれを行う方法がありますか?
ありがとうございます。
Audio Queue を使用する iPad アプリを作成しています。AudioSessionInitialize を複数回呼び出した結果、エラーが発生しました。これを回避するために AudioSessionInitialize が既に呼び出されているかどうかをテストする方法を見つけようとしていますが、今のところうまくいきません。誰にもこれを行う方法がありますか?
ありがとうございます。
次のように、dispatch_once ブロックでラップするだけです。
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
AudioSessionInitialize(NULL, NULL, InterruptionListenerCallback, clientData);
// Perform other setup here...
});
ただし、ここで説明するように、セッションの暗黙的な初期化を使用し、デリゲートを介してイベントを処理する方が長期的には簡単だと思うかもしれません:
オーディオ セッションは現在グローバル プロパティであるため、初期化時に C グローバル変数フラグを設定し、(再) 初期化を試みる前にこのグローバル変数をチェックすることができます。ただし、アプリがマルチスレッドの場合、dispatch_once ブロックで競合状態のバグが発生する可能性は低くなります。