AVPlayer的奇怪行为

时间:2018-02-05 02:31:24

标签: ios swift xcode avfoundation avplayer

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

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

TPngImage

那里没有什么特别有趣的事情。我只是用电台URL创建一个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(); } } 实例并将其提供给AVPlayer,然后让播放器对象播放该歌曲,它就像预期的那样工作。

但是,如果我从类块中删除AVPlayerItem对象实例化并将其放在player方法中,则代码根本不起作用(不播放任何内容)但它没有不要崩溃或吐出任何类型的错误或警告。

viewDidLoad

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

1 个答案:

答案 0 :(得分:1)

正如Andrea Mugnaini在我的帖子的评论中解释的那样,我的第二个例子是 ARC (自动引用计数)导致立即释放,因为我们没有&# 39;保持强引用到AVPlayer对象。

这是Apple新生态系统开发人员常见的陷阱。