编辑:将我的设备(和部署目标)从 iOS 4.3.5 更新到 iOS 5.1.1,但仍然存在同样的问题
在播放声音后释放类成员AVAudioPlayer以播放另一个声音时出现问题。
这似乎只是我的一个设备上的问题,运行iOS 4.3.5/5.1.1的第三代iPod Touch。
我运行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;
}
第一次播放很好,但是当此代码第二次执行以播放另一个声音时,它会给出EXC_BAD_ACCESS错误,这在我的第 4 代/第 5代设备上不会发生。
我故意延迟释放,直到我需要播放另一个声音,以便给播放时间来执行。
尝试使用AVAudioPlayerDelegate但这并没有解决问题,也没有调用:
[audio prepareToPlay];
我确实在viewDidLoad中将音频初始化为nil ,并在viewDidUnload和dealloc中进行清理。
有很多内存泄漏问题,但这个版本的代码似乎已经解决了这个问题。