ios - 为什么播放时系统不保留一个AVAudio播放器?

标签 ios avfoundation avaudioplayer

在大多数情况下,当您触发异步系统调用并将资源传递给它时,系统会保留对该资源的强引用,因此它仍然可用。

AVAudioPlayer 似乎是个异常(exception)。

代码

func playSound() {
  guard let soundFileURL = Bundle.main.url(forResource:"Shut your festering Gob", withExtension: "mp3") else {
    return
  }
  let player = try? AVAudioPlayer(contentsOf: soundFileURL)
  player?.play()
}

不起作用,因为当函数返回且音频播放器被释放时,局部变量 player 超出范围。

相比之下,调度 Timer 会在该计时器运行期间保留该计时器的目标。这似乎是基础类(class)的常态。

看起来 AVFoundation 应该在播放期间引用 AVAudioPlayer

有人知道 AVFoundation 在播放期间保留音频播放器的具体原因吗?

最佳答案

鞋子在另一只脚上。当局部上下文结束(执行到达周围花括号的末尾)时,局部变量超出范围并不存在是正常的。其他行为是不寻常的。因此,您应该问为什么以及如何保留计时器!正如夏洛克·福尔摩斯所说,这就是奇怪的事件。

答案是,当您安排计时器时,您特别要求保留它(由当前运行循环)。那只是定时器的特殊架构。但是,通常保留对计时器的引用,以防您需要使其无效

关于ios - 为什么播放时系统不保留一个AVAudio播放器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42749414/

相关文章:

android - Ionic & Cordova SMS 插件

ios - 在 iOS 上以编程方式切换到备用 ViewController

javascript - 如何将合金代码转换为经典钛

ios - 如何反转 UIView 或层下所有 View 的颜色?

iOS 忽略 enqueueSampleBuffer 因为状态失败

ios - 在后台播放的音频在 iOS 模拟器中不起作用

xcode - AVFoundation 框架中不存在 AVAudioSession

ios - 将 AVFoundation 与高分辨率视频一起使用时出现 -11855 错误代码。我应该使用什么分辨率?

ios - AVAudioPlayer 得到错误的文件持续时间 iOS 10

iphone - 如何在 iPhone 中以 mp3 格式录制声音