gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 19:32:08 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com