这是我为自己构建的第一个应用程序尝试修复内存泄漏问题。当我使用Leaks工具时,在我的登录视图控制器上发现了1个泄露,据我所知,这与我正在使用的音频工具箱(AVFoundation)有关,我将其用于循环视频背景。
因此,我认为我应该尝试将
如何正确地解决此泄漏问题?
以下是与循环背景视频相关的代码...
因此,我认为我应该尝试将
AVPlayer
变量设置为weak
,但对泄漏没有任何影响。如何正确地解决此泄漏问题?
以下是与循环背景视频相关的代码...
weak var player : AVPlayer?
weak var playerLayer : AVPlayerLayer?
override func viewDidLoad() {
super.viewDidLoad()
playBackgroundVideo()
}
func playBackgroundVideo() {
guard let path = Bundle.main.path(forResource: "dumbbells2480", ofType: "mov") else { return }
player = AVPlayer(url: URL(fileURLWithPath: path))
player!.actionAtItemEnd = AVPlayer.ActionAtItemEnd.none
playerLayer = AVPlayerLayer(player: player)
playerLayer!.frame = self.view.frame
playerLayer!.videoGravity = AVLayerVideoGravity.resizeAspectFill
self.view.layer.insertSublayer(playerLayer!, at: 0)
NotificationCenter.default.addObserver(self, selector: #selector(playerItemDidReachEnd), name: Notification.Name.AVPlayerItemDidPlayToEndTime, object: player!.currentItem)
NotificationCenter.default.addObserver(self,selector: #selector(playItem),name: UIApplication.willEnterForegroundNotification, object: nil)
player!.seek(to: CMTime.zero)
player!.play()
self.player?.isMuted = true
view.bringSubviewToFront(authStackView)
}
@objc func playerItemDidReachEnd(){
player!.seek(to: CMTime.zero)
}
@objc private func playItem() {
playerItemDidReachEnd()
player?.play()
if let playerlayer = playerLayer {
view.layer.insertSublayer(playerlayer, at: 0)
}
}