編集: iOS 4.3.5 から iOS 5.1.1 に私のデバイス (および展開ターゲット) を更新しましたが、まだ同じ問題があります
サウンドを再生した後、クラス メンバーAVAudioPlayerを解放して別のサウンドを再生する際に問題が発生しました。
これは、 iOS 4.3.5/5.1.1を実行している第 3世代のiPod Touchという私のデバイスの 1 つだけに問題があるようです。
iOS 6を実行している私の第 4世代と第 5世代のデバイスは問題なく動作します。
[audio release];
audio = nil;
@try
{
audio = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
if ((audio != nil) && (!error))
{
audio.delegate = (id)self;
audio.volume = gVolume/10;
[audio play];
}
else
{
[audio release];
audio = nil;
}
}
@catch (NSException *exception)
{
[audio release];
audio = nil;
}
最初は問題なく再生されますが、このコードが別のサウンドを再生するために 2 回目に実行されると、EXC_BAD_ACCESSエラーが発生します。これは、第4/5世代のデバイスでは発生しません。
再生時間を与えるために、別のサウンドを再生する必要があるまで、意図的にリリースを遅らせます。
AVAudioPlayerDelegateを使用してみましたが、問題は解決しませんでした。
[audio prepareToPlay];
viewDidLoadでオーディオをnilに初期化し、 viewDidUnloadとdeallocでクリーンアップします。
多くのメモリリークの問題がありましたが、このバージョンのコードはそれを解決したようです.