gpt4 book ai didi

ios - AVPlayer 的奇怪行为

转载 作者:行者123 更新时间:2023-11-28 06:04:35 25 4
gpt4 key购买 nike

在使用 AVFoundation 框架中的 AVPlayer 时,我注意到一个非常奇怪的行为。我正在尝试从互联网流式传输(播放)一些 mp3 广播文件。

所以我在Xcode中新建了一个项目,并在默认的ViewController中添加了如下代码:

import UIKit
import AVFoundation

class ViewController: UIViewController {

let player: AVPlayer = AVPlayer()

override func viewDidLoad() {
super.viewDidLoad()

let asset = AVAsset(url: URL(string: "https://rfcmedia.streamguys1.com/Newport.mp3")!);
let playerItem = AVPlayerItem(asset: asset);
player.replaceCurrentItem(with: playerItem)
player.play();
}
}

那里没有什么特别有趣的事情发生。我只是用电台 URL 创建了一个 AVPlayerItem 实例,并将其提供给 AVPlayer,然后要求播放器对象播放歌曲,它按预期工作。

但是,如果我从类 block 中删除 player 对象实例化并将其放入 viewDidLoad 方法中,代码根本不起作用(不播放任何东西)但它不会崩溃或吐出任何类型的错误或警告。

import UIKit
import AVFoundation

class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()

let player: AVPlayer = AVPlayer()
let asset = AVAsset(url: URL(string: "https://rfcmedia.streamguys1.com/Newport.mp3")!);
let playerItem = AVPlayerItem(asset: asset);
player.replaceCurrentItem(with: playerItem)
player.play();
}
}

我无法理解这种行为。为什么会这样?它是否仅限于 AVPlayer 还是我应该注意这种情况?

最佳答案

正如 Andrea Mugnaini 在对我的帖子的评论中所解释的那样,我的第二个示例将导致 ARC(自动引用计数)立即释放,因为我们没有这样做不要保留对 AVPlayer 对象的强引用

这是刚接触 Apple 生态系统的开发者常犯的错误。

关于ios - AVPlayer 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48615099/

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