我有一个附带视图控制器的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];
现在,如果视图控制器被解除或弹出,应该调用dealloc并且音频播放器应该停止并且应该销毁视图控制器。但是,这不会发生。音频不会停止,因为在音频停止播放之前不会调用dealloc。这里发生了什么?并且,如果用户解除控制器而不是音频停止,我该如何确保。
答案 0 :(得分:2)
您可以在视图被解除时暂停或停止音频,即调用viewWillDisappear:
或viewDidDisappear:
方法时。
- (void)viewWillDisappear:(BOOL)animated
{
[_previewAudioPlayer stop];
[super viewWillDisappear:animated];
}