Vazamento de memória AVAudioPlayer
Eu estou preso em algum problema de vazamento de memória estranho relacionado ao AVAudioPlayer e preciso de ajuda depois de tentar tudo o que me veio à mente.
Aqui está a breve descrição do problema - o código aparece logo em seguida. Eu inicializo meu player e começo a tocar a trilha sonora em um loop infinito (e um loop infinito ou uma vez não alteram o problema). Alguns segundos depois que a música começou, eu mudo para outra trilha sonora, por isso eu crio um novo player, inicializo, libero o antigo (que está tocando) e então coloco o novo no lugar e o reproduzo.
Naquele momento (logo após eu ligar para o novo Player - [Player play]) eu recebo um vazamento de memória (de 3.5Kb).
Eu tentei o seguinte:
Pare o jogador antigo e solte-o - sem efeito
Solte o Player logo após a instrução de reprodução - não começou a jogar
Solte o dobro do antigo player - crash
Vazamento de memória NÃO acontece quando eu crio e jogo o primeiro jogador!
Além disso, na referência, ele diz que o 'play' é assíncrono e, portanto, provavelmente aumenta a contagem de referências em 1, mas, nesse caso, por que o [Player stop] não ajudou?
Obrigado,
Aqui estão algumas partes do código sobre como eu o uso:
- (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;
}