Swift:AVPlayer释放内存/资源

use*_*552 5 ios avplayer avplayerlayer swift avplayeritem

我正在编写一个应用程序,需要根据用户的选择显示不同的视频.当用户选择视频时,将调用playVideo功能.视频播放完毕后,视频将再次隐藏.

我的代码如下:

var player: AVPlayer?


  func playVideo(String: videoFile) {
    self.videoView.isHidden = false
    let videoURL: NSURL = Bundle.main.url(forResource: videoFile, withExtension: "mp4")! as NSURL
    self.player = AVPlayer(url: videoURL as URL)
    let playerLayer = AVPlayerLayer(player: player)
    playerLayer.frame = self.videoView.frame
    self.videoView.layer.addSublayer(playerLayer)
    let duration : Int64 = 0
    let preferredTimeScale : Int32 = 1
    let seekTime : CMTime = CMTimeMake(duration, preferredTimeScale)
    self.player?.seek(to: seekTime)
    self.player?.play()

    NotificationCenter.default.addObserver(self, selector: #selector(self.playerItemDidReachEnd), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: player?.currentItem)
  }

@objc func playerItemDidReachEnd()
  {
    self.player?.pause()
    self.videoView.isHidden = true
    NotificationCenter.default.removeObserver(self)
  }
Run Code Online (Sandbox Code Playgroud)

但是,根据上面的代码,我有几个问题:

  1. 如何优雅地删除/取消分配播放器?如果只使用我当前的代码,它会占用大量内存吗?

  2. 每当用户按下按钮时,将调用playVideo功能,并创建并播放相应的播放器.这是正确的方法吗?有没有其他方法或更有效的方式或优雅的方式这样做?

  3. 我确实尝试通过以下方式替换播放器创建时的代码,但无法播放视频.

    让playerItem:AVPlayerItem = AVPlayerItem(url:videoURL as URL)self.player?= AVPlayer(playerItem:playerItem)

谢谢