Przeciek pamięci AVAudioPlayer

Utknąłem na jakimś dziwnym problemie z wyciekiem pamięci związanym z AVAudioPlayer i potrzebuję pomocy po wypróbowaniu wszystkiego, co przyszło mi do głowy.

Oto krótki opis problemu - kod pojawia się zaraz po nim. Inicjalizuję odtwarzacz i zaczynam odtwarzać ścieżkę dźwiękową w nieskończonej pętli (a nieskończona pętla lub jednorazowa gra nie zmieniły problemu). Kilka sekund po rozpoczęciu muzyki przełączam się na inną ścieżkę dźwiękową, dlatego tworzę nowego odtwarzacza, inicjuję go, wypuszczam starego (który jest odtwarzany), a następnie ustawiam nowy i odtwarzam go.

W tym momencie (zaraz po tym, jak zadzwonię do nowego gracza - [Player play]) dostaję wyciek pamięci (3,5 KB).

Próbowałem:

Zatrzymaj starego gracza i zwolnij go - bez efektu

Zwolnij gracza zaraz po instrukcji gry - nie zaczął grać

Zwolnij dwukrotnie starego gracza - awaria

Przeciek pamięci NIE ma miejsca, gdy tworzę i gram pierwszego gracza!

Ponadto w odnośniku powiedziano, że „play” jest asynchroniczne, więc prawdopodobnie zwiększa liczbę ref o 1, ale w tym przypadku, dlaczego [Player stop] nie pomógł?

Dzięki,

Oto kilka części kodu o tym, jak go używam:

- (void) loadAndActivateAudioFunction {
NSBundle        *mainBundle = [NSBundle mainBundle];
NSError         *error;
NSURL           *audioURL = [NSURL fileURLWithPath:[mainBundle pathForResource: Name ofType: Type]];
AVAudioPlayer   *player = [(AVAudioPlayer*) [AVAudioPlayer alloc] initWithContentsOfURL:audioURL error:&error];

if (!player) {
    DebugLog(@"Audio Load Error: no Player: %@", [error localizedDescription]);
    DuringAudioPrep = false;
    return;
}
[self lock];
[self setAudioPlayer: player];
[self ActivateAudioFunction];
[self unlock];

}

- (void) setAudioPlayer : (AVAudioPlayer *) player {
if (Player)
{
    if ([Player isPlaying] || Repeat)  // The indication was off???
        [Player stop];
    [Player release];
}
Player = player;

}

- (void) ActivateAudioFunction {
[Player setVolume: Volume];
[Player setNumberOfLoops: Repeat];    
[Player play];

DuringAudioPrep = false;

}

questionAnswers(4)

yourAnswerToTheQuestion