gpt4 book ai didi

ios - 欢迎屏幕中的视频使用 AVPlayer 导致内存泄漏?

转载 作者:行者123 更新时间:2023-11-28 15:06:58 27 4
gpt4 key购买 nike

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

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

在父类(super class)中,我有一个加载 View 的 View :

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 个 View Controller 后,使用率保持在最大值。

然后我进入了登录界面,然后又回到了欢迎界面。初始使用量变为 750MB。如果我一直从登录界面和欢迎界面跳转,使用率会一直上升!

这是我想做的:

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

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

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

  • player更改为static

  • 当 View 消失时,从 superLayer 中移除 AVPlayerLayer

  • 设置AVPlayer为nil

仅供引用 我在 viewDidLoad 中运行了 CFGetRetainCount,结果是 5 个。我找不到其他 4 个。

最佳答案

实际上一起做下面的事情就成功了

  • 当 View 消失时,从 superLayer 中移除 AVPlayerLayer

  • 设置 AVPlayer 为 nil

关于ios - 欢迎屏幕中的视频使用 AVPlayer 导致内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48293169/

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