Воспроизведение / пауза / остановка AVAudioPlayer и выпуск UIViewController / dealloc - PullRequest
3 голосов
/ 12 декабря 2011

У меня есть экземпляр AVAudioPlayer, подключенный к контроллеру представления.

@property (nonatomic, retain) AVAudioPlayer *previewAudioPlayer;

Я инициализировал его в -viewDidLoad.

NSError *error = nil;
AVAudioPlayer *aNewPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:&error];
self.previewAudioPlayer = aNewPlayer;
[aNewPlayer release];

[self.previewAudioPlayer prepareToPlay];

И я освобождаю его в методе управления представлениями -dealloc.

- (void)dealloc {
    [_previewAudioPlayer pause];
    [_previewAudioPlayer release];

    [super dealloc];
}

Звук воспроизводится при нажатии кнопки.

[self.previewAudioPlayer play];

Теперь, если контроллер представления уволен или выскочил, должен быть вызван Deloc, и аудиоплеер должен остановиться, и контроллер представления должен быть уничтожен. Однако этого не происходит. Звук не останавливается, потому что dealloc не вызывается, пока звук не перестанет воспроизводиться. Что тут происходит? И как я могу убедиться, что если пользователь отключает контроллер, то звук останавливается.

1 Ответ

2 голосов
/ 12 декабря 2011

Вы можете приостановить или остановить аудио, когда представление отклоняется, то есть когда вызывается метод viewWillDisappear: или viewDidDisappear:.

- (void)viewWillDisappear:(BOOL)animated 
{
   [_previewAudioPlayer stop];
   [super viewWillDisappear:animated];
}
...