我正在使用AVAudioPLayer为我的游戏制作音频。我在单独的类中的方法中有以下代码,每次我想要播放“boing”声时都会调用它。问题是,它会泄漏大量内存,导致游戏无法播放。现在我没有发布方法中的任何指针,因为当时我只有一个。但现在我有10种方法。
在这种情况下发布指针的最佳方法是什么? (是的,我试过在[boing play]之后直接释放;这解决了泄漏(显然),但声音没有发挥,所以没有意义。
-(void)playBoing {
int x = (arc4random()%3)+1;
NSString *path = [NSString stringWithFormat:@"/boing_0%i.aif", x];
NSString* resourcePath = [[NSBundle mainBundle] resourcePath];
resourcePath = [resourcePath stringByAppendingString:path];
AVAudioPlayer *boing = [[AVAudioPlayer alloc] initWithContentsOfURL:
[NSURL fileURLWithPath:resourcePath] error:nil];
boing.delegate = self;
boing.volume = 1;
[boing play];
}
答案 0 :(得分:2)
有可能有一个更好的解决方案,但我遇到了类似的问题,立即发布会杀死我的进程。这是我采取的解决方案。再一次,可能会有更好的,但为了快速解决,它应该做的伎俩。
在头文件中,创建以下内容:
AVAudioPlayer *boing;
然后在-(void)playBoing
中,按照您的方式行事,但改变
AVAudioPlayer *boing = [[AVAudioPlayer alloc] initWithContentsOfURL:
[NSURL fileURLWithPath:resourcePath] error:nil];
到
if (boing != nil) {
boing = nil;
[boing release];
}
boing = [[AVAudioPlayer alloc] initWithContentsOfURL:
[NSURL fileURLWithPath:resourcePath] error:nil];
这应该确保一次只分配一个boing
个实例