我的代码中有以下几行:
NSString *soundPath = [[NSBundle mainBundle] pathForResource:[[soundString componentsSeparatedByString:@"."]objectAtIndex:0] ofType:@"wav"];
NSURL *soundURL_ = [NSURL fileURLWithPath:soundPath];
av_player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundURL_ error:nil];
这些行属于一个叫做AnimatableObject
的类,我在一个ViewController
中使用了大约10到30次。
在ViewControllers
初始化和加载的前几次,它都工作得很好。但是在切换ViewControllers
一段时间后,我的应用程序崩溃了,因为下面的行(以前一直工作)现在返回nil。
av_player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundURL_ error:nil];
我检查了soundPath或soundURL_是否为nil。但他们还好。
那么现在我问我自己,为什么会发生,它工作了很多次,然后返回nil?在同一个应用程序中,无需关闭并重新启动它。我所做的就是在viewcontroller之间切换。我首先认为这是一个内存问题,但我没有得到任何内存警告。
我真的不知道为什么会发生这种事。
任何帮助都会很感激。提前谢谢,特立独行的。
——编辑 --------
我现在发现我得到以下错误:
ImageIO: CGImageRead_mapData 'open' failed '/var/mobile/Applications/F3186E1A-BBC2-47A6-8EF6-90F73C9BD566/huckla_zoo.app/Weiter.png'
error = 24 (Too many open files)
所以我意识到我不能打开一个声音文件时,我得到这个错误。我现在唯一想知道的是:如何关闭文件句柄?我不通过[UIImage imageNamed:]
加载图像而是使用
[UIImage imageWithContentsOfFile:filename];
我还实现了一个MutableDictionary作为图像缓存得到清空,当内存问题发生。还有其他选项可以让我关闭文件句柄吗?
TRY THIS,
NSString* URL = [YOUR_URL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
从错误中,听起来您打开了很多文件,却忘记关闭它们。完成后是否释放文件对象?你要处理多少文件?