我需要让一个播放器循环,但为什么当我添加
NotificationCenter.default.addObserver(forName:NSNotification.Name.AVPlayerItemDidPlayToEndTime,object: nil, queue:nil){
notification in
videoPlayer.seek(to: KCMTimeZero)
videoplayer.play()
}
}
当我在我的 viewController 中关闭时,我的 View 保留在内存中。 我如何重现视频 每次打开 ViewController 时,我的内存力都会增加
如果没有此代码,它会被成功删除。
我不知道我该做什么
你能帮帮我吗?
最佳答案
您的代码存在三个问题:
默认情况下,引用作为强引用传递到 block 中。为确保它们不被保留,请使用
weak
或unowned
:NotificationCenter.default.addObserver(forName:NSNotification.Name.AVPlayerItemdidPlayToEndTime,object: nil, queue:nil){ [weak videoPlayer] notification in videoPlayer?.seek(to: KCMTimeZero) videoplayer?.play() }
自 iOS 9 起,无需从
返回的观察者的引用NotificationCenter
中删除观察者 除非您正在使用 block 观察者(您就是)。您应该存储对从NotificationCenter.addObserver:forName:object:queue:usingBlock:
:self.observer = NotificationCenter.default.addObserver(...)
在 viewWillDissappear
中:
NotificationCenter.default.removeObserver(self.observer)
(或者,您可以改用选择器,正如 Chan Jing Hong 所指出的;在这种情况下,不再需要移除观察者,但可能需要,具体取决于您应用的逻辑)
- 您注册
NSNotification.Name.AVPlayerItemdidPlayToEndTime
的方式,只要anyAVPlayerItem
播放结束,您就会收到通知。为避免潜在问题,请收听当前播放项目的通知(通过将object:nil
替换为object: playerItem
)
关于ios - AVPlayer 在视频循环时保存在内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41346138/