【问题标题】:AVAudioPlayer play/pause/stop and UIViewController release/deallocAVAudioPlayer 播放/暂停/停止和 UIViewController 释放/释放
【发布时间】:2012-01-18 09:05:03
【问题描述】:

我有一个带有视图控制器的 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。这里发生了什么?而且,我如何确保如果用户关闭控制器而不是音频停止。

【问题讨论】:

  • 你知道如何在我们创建了AVPlayer实例的ViewController被销毁后继续播放音频吗?

标签: ios uiviewcontroller avaudioplayer


【解决方案1】:

您可以在视图关闭时暂停或停止音频,即调用 viewWillDisappear:viewDidDisappear: 方法时。

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

【讨论】:

  • 这确实解决了问题,但是我仍在寻找“为什么不调用 dealloc 方法”的答案。谢谢。
  • 你知道如何在我们创建了AVPlayer实例的ViewController被销毁后继续播放音频吗?
  • 您可能必须以某种方式保持AVAudioPlayer 实例处于活动状态。如果视图控制器是所有者,那么当它死亡时,它也会是玩家。
猜你喜欢
  • 2013-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多