【问题标题】:Videos in welcome screen using AVPlayer causing memory leak?欢迎屏幕中的视频使用 AVPlayer 导致内存泄漏?
【发布时间】:2018-01-17 03:32:13
【问题描述】:

在我的应用程序中,有一个由 3 个屏幕组成的欢迎屏幕。它们都继承自一个超类。它们之间的区别只是文字和视频网址:

|-SuperWelcomeScreenViewController
|----FirstWelcomeScreenViewController
|----SecondWelcomeScreenViewController
|----ThirdWelcomeScreenViewController

在超类中,我有一个视图来加载视图:

private final var player: AVPlayer = AVPlayer()
private final lazy var videoView: UIView = {
    let v = UIView()

    let videoString:String? = Bundle.main.path(forResource: self.videoPath, ofType: "mp4")
    guard let unwrappedVideoPath = videoString else {return v}

    let videoUrl = URL(fileURLWithPath: unwrappedVideoPath)
    let item = AVPlayerItem(url: videoUrl)

    self.player.replaceCurrentItem(with: item)
    let layer: AVPlayerLayer = AVPlayerLayer(player: player)

    //Using the size of the video
    layer.frame = CGRect(x: -125, y: 0, width: 250, height: 541)
    layer.videoGravity = AVLayerVideoGravity.resizeAspectFill
    v.layer.addSublayer(layer)

    return v
}()

问题出在这里:我在模拟器上测试了内存使用情况,一开始它大约是 250MB。然后我滑动到下一个欢迎屏幕,它变成了 450MB。然后是 550MB。我的欢迎屏幕有一个无限循环,但在 3 个视图控制器全部显示后,使用量仍保持在最大值。

然后我进入登录屏幕,然后返回欢迎屏幕。初始使用量变为 750MB。如果我不断从登录屏幕和欢迎屏幕跳转,使用量将不断提高!

这是我想做的事情:

  • 首先,当我从登录屏幕和欢迎屏幕跳转时,我希望内存使用量保持稳定。

  • 其次,我想在欢迎屏幕之间回收内存。这样每个屏幕的使用量大约为 250MB。

以下是我尝试过但失败的方法:

  • player更改为static

  • 当视图消失时从superLayer 中删除AVPlayerLayer

  • AVPlayer设置为零

仅供参考我在 viewDidLoad 中运行了 CFGetRetainCount,它是 5。我找不到其他 4。

【问题讨论】:

    标签: ios swift avplayer avkit


    【解决方案1】:

    其实下面一起做事就成功了

    • 当视图将消失时从 superLayer 中移除 AVPlayerLayer

    • 将 AVPlayer 设置为 nil

    【讨论】:

      猜你喜欢
      • 2019-03-17
      • 2023-03-27
      • 2013-09-07
      • 2017-04-20
      • 1970-01-01
      • 2017-04-09
      • 2021-09-02
      • 1970-01-01
      • 2015-07-06
      相关资源
      最近更新 更多