gpt4 book ai didi

ios - AVPlayer 在视频循环时保存在内存中

转载 作者:行者123 更新时间:2023-11-28 09:36:19 25 4
gpt4 key购买 nike

我需要让一个播放器循环,但为什么当我添加

NotificationCenter.default.addObserver(forName:NSNotification.Name.AVPlayerItemDidPlayToEndTime,object: nil, queue:nil){
notification in
videoPlayer.seek(to: KCMTimeZero)
videoplayer.play()
}
}

当我在我的 viewController 中关闭时,我的 View 保留在内存中。我如何重现视频 每次打开 ViewController 时,我的内存力都会增加

如果没有此代码,它会被成功删除。

我不知道我该做什么

你能帮帮我吗?

最佳答案

您的代码存在三个问题:

  1. 默认情况下,引用作为强引用传递到 block 中。为确保它们不被保留,请使用 weakunowned:

    NotificationCenter.default.addObserver(forName:NSNotification.Name.AVPlayerItemdidPlayToEndTime,object: nil, queue:nil){
    [weak videoPlayer] notification in
    videoPlayer?.seek(to: KCMTimeZero)
    videoplayer?.play()
    }
  2. 自 iOS 9 起,无需从 NotificationCenter 中删除观察者 除非您正在使用 block 观察者(您就是)。您应该存储对从 NotificationCenter.addObserver:forName:object:queue:usingBlock::

    返回的观察者的引用
    self.observer = NotificationCenter.default.addObserver(...)

viewWillDissappear 中:

NotificationCenter.default.removeObserver(self.observer)

(或者,您可以改用选择器,正如 Chan Jing Hong 所指出的;在这种情况下,不再需要移除观察者,但可能需要,具体取决于您应用的逻辑)

  1. 您注册NSNotification.Name.AVPlayerItemdidPlayToEndTime 的方式,只要any AVPlayerItem 播放结束,您就会收到通知。为避免潜在问题,请收听当前播放项目的通知(通过将 object:nil 替换为 object: playerItem)

关于ios - AVPlayer 在视频循环时保存在内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41346138/

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