簡體   English   中英

MASSIVE AVAudioPlayer內存泄漏

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM