我正在尝试使用AVAudioPlayer快速连续播放一些声音。当我不太频繁地调用声音播放功能,以便在函数再次调用之前声音完全播放时,应用程序运行良好。但是,如果我快速连续调用该函数(以便在播放前一个声音时播放声音),则应用程序在调用〜20个函数后最终崩溃,并显示“EXC_BAD_ACCESS”消息。下面是从功能代码:在iPhone上使用AVAudioPlayer时崩溃
NSString *nsWavPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:wavFileName];
AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:nsWavPath] error:NULL];
theAudio.delegate = self;
[theAudio play];
正如在另一个线程中提到,我采取了以下委托功能:
- (void) audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
if(!flag)
NSLog(@"audio did NOT finish successfully\n");
[player release];
}
,但应用程序依然围绕后20〜迅速调用该函数崩溃。任何想法我做错了什么?
感谢罗布!事实证明,我在某些情况下释放了视图本身,因此导致EXC_BAD_ACCESS,因为声音仍在播放,但其代表已被释放。我立即调用[theAudio播放],然后调用 [自发布] 在audioPlayerDidFinishPlaying后[播放器发布]之前修复它通过添加 [自我保留] 。那就摆脱了崩溃。 – mindthief 2010-06-16 08:30:17