【问题标题】:iOS 5 AVAudioPlayer - With ARC enabled, how do I properly stop playback?iOS 5 AVAudioPlayer - 启用 ARC 后,如何正确停止播放?
【发布时间】:2011-12-25 14:32:40
【问题描述】:

我正在使用启用了 ARC 的 iOS 5。当点击视图时,我正在播放与特定视图关联的录音。当用户改变视图时,播放停止。我使用 NSNotification 调用 -stopPlayback 方法,该方法工作正常。问题是当用户返回原始视图并点击它时,它会从停止的地方继续录制。

禁用 ARC 后,我可以使用以下代码:

-stopPlayback
{
 if([audioPlayer isPlaying])
 {
 [audioPlayer stop];
 [audioPlayer release];
 audioPlayer = nil;
 }
}

由于 ARC 不允许 [audioPlayer release],我无法从头重置播放。我删除了 [audioPlayer release] 和 audioPlayer=nil;因为 ARC 会处理它,结果是录制在上次停止后停止的地方播放。我没有看到 Apple 提供的关于如何在播放发生时从头开始重新开始录制的任何好的示例或文档。最好的方法是什么?

【问题讨论】:

    标签: objective-c ios5 release avaudioplayer automatic-ref-counting


    【解决方案1】:

    这是我想出的解决方案:

    -stopPlayback{  
     if([audioPlayer isPlaying])
     {
       [audioPlayer stop];
       audioPlayer.currentTime=0;
     }
    }
    

    无论何时停止,现在都会从头开始重播。 我尝试使用 [audioPlayer pause] 而不是 [audioPlayer stop] 导致播放在初始暂停后不再播放。当我添加 'audioPlayer=nil; 时发生了类似的事情。 (尽管我没有记录确切的组合)。作为响应的一部分发布的相关问题确实利用了 currentTime=0 但其余代码不符合我的需求。谁能明白为什么这行不通?任何进一步的 cmets 表示赞赏。

    【讨论】:

      【解决方案2】:

      您仍然需要设置为nil

      if([audioPlayer isPlaying])
      {
          [audioPlayer stop];
          audioPlayer = nil;
      }
      

      【讨论】:

      • 谢谢。我确实在我的代码中更新了它。从头开始重新播放呢?
      • currentTime 呢?如果我添加'audioPlayer.currentTime=0;'那会从头开始播放吗?
      • 如果您只想重新启动播放器,则无需释放它。见this question
      猜你喜欢
      • 2011-12-03
      • 1970-01-01
      • 2012-12-03
      • 1970-01-01
      • 1970-01-01
      • 2016-07-29
      • 2013-08-29
      • 1970-01-01
      • 2012-01-18
      相关资源
      最近更新 更多