Утечка памяти в AVAudioPlayer
Я застрял в какой-то странной проблеме утечки памяти, связанной с AVAudioPlayer, и мне нужна помощь после того, как я попробовал все, что пришло в голову.
Вот краткое описание проблемы - код появляется сразу после. Я инициализирую свой плеер и начинаю воспроизводить звуковую дорожку в бесконечном цикле (и бесконечный цикл или однократное воспроизведение не изменили проблему). Через несколько секунд после запуска музыки я переключаюсь на другую звуковую дорожку, поэтому создаю новый проигрыватель, инициализирую его, освобождаю старый (который воспроизводится), а затем устанавливаю новый на место и воспроизводю его.
В этот момент (сразу после того, как я позвоню новому игроку - [Play player]) я получаю утечку памяти (размером 3,5 Кб).
Я попробовал следующее:
Остановите старый плеер и затем отпустите его - никакого эффекта
Отпустите плеер сразу после инструкции воспроизведения - не начал играть
Отпустите дважды старый плеер - сбой
Утечка памяти НЕ происходит, когда я создаю и играю первым игроком!
Кроме того, в ссылке говорится, чтоиграть' является асинхронным и поэтому, вероятно, увеличивает счетчик ссылок на 1, но в этом случае, почему неt [Player stop] помочь?
Спасибо,
Вот некоторые части кода о том, как я его использую:}}}
- (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;