У меня есть экземпляр 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 не вызывается, пока звук не перестанет воспроизводиться. Что тут происходит? И как я могу убедиться, что если пользователь отключает контроллер, то звук останавливается.