[英]MASSIVE AVAudioPlayer Memory Leaks
我正在使用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];
}
這可能是一個更好的解決方案,但我遇到了類似的問題,立即釋放殺死了我的進程。 這是我采取的解決方案。 同樣,可能會有更好的,但為了快速解決,它應該做的伎倆。
在頭文件中,創建以下內容:
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
實例
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.