错误24(打开的文件太多)-iPhone
我最近在我的游戏中实现了声音。每次用户触摸屏幕时,都会射出一个箭头,并播放一个声音。我正在使用以下代码播放声音:错误24(打开的文件太多)-iPhone,iphone,ios,avfoundation,avaudioplayer,Iphone,Ios,Avfoundation,Avaudioplayer,我最近在我的游戏中实现了声音。每次用户触摸屏幕时,都会射出一个箭头,并播放一个声音。我正在使用以下代码播放声音: - (void)arrowShoot { NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/arrow.mp3", [[NSBundle mainBundle] resourcePath]]]; arrowShootPlayer = [[AVAudioPlayer alloc] in
- (void)arrowShoot {
NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/arrow.mp3", [[NSBundle mainBundle] resourcePath]]];
arrowShootPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
if (arrowShootPlayer != nil) {
[arrowShootPlayer play];
}
}
我每次都给arrowShootPlayer
分配内存的原因是用户可以快速点击屏幕,我希望声音重叠。否则,仅在前一个声音播放完毕后播放该声音
无论如何,我得到了这个错误:
<com.apple.main-thread> shm_open failed: "AppleAudioQueue.36.5755" (23) flags=0x2 errno=24
shm_打开失败:“AppleAudioQueue.36.5755”(23)标志=0x2错误号=24
一旦我出现这个错误,声音就停止播放。其他一切都很好,只是箭的声音停止了播放
有没有更好的办法在iPhone上播放类似这样的“重叠”声音,或者有没有办法避免这个错误
谢谢如果始终是相同的音频,请使用从内存缓冲区播放,而不是打开文件。声明一些本地缓冲区:
NSData* data;
然后在您的方法中:
if(!data) {
data = [NSData dataWithContentsOfURL:url options:NSDataReadingMappedIfSafe error:&err];
}
arrowShootPlayer = [[AVAudioPlayer alloc] initWithData:data error:nil];
if (arrowShootPlayer) {
[arrowShootPlayer play];
}
也许您需要在文件停止播放后手动关闭(或重新使用)该文件?另一个家伙不知道
stringByAppendingPathComponent:
,而是使用错误和多余的格式化方法…不过,您正在泄漏内存。你必须确保在某处释放AVAudioPlayers。最简单的方法是使用ARC;)我总是使用ARC,所以如果有人不这样做,我就让他来处理。:)我有一个要求,将刷新0.000011秒的Api数据,我已经设置了定时器。所以我犯了这个错误(太吝啬了打开文件),现在我该怎么办?@iosdeveloper,实现一个队列。使用这种刷新率,您将没有时间完成线程,因此它会重叠并阻止文件关闭。您能给我举个例子吗?