我对iOS快速开发相当新,我对内存管理有一定的了解。
正在处理的应用程序是一系列表格视图,以AVPlayerView控制器播放来自流式网址的视频结束。
在模拟器中运行应用程序并观察内存仪表板时,我可以看到从一个表视图返回到前一个表视图会使内存减少。但是,当进入AVPlayerView控制器时,内存会增加,然后当返回上一个表View时,内存不会减少。
我在我的PlayerView控制器(viewDidLoad)上使用以下代码:
var player : AVPlayer? = nil
let playerController = AVPlayerViewController()
var playerItem = AVPlayerItem(URL: mediaUrl)
self.player = AVPlayer(playerItem: playerItem)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "playerDidFinishPlaying:", name: AVPlayerItemDidPlayToEndTimeNotification, object: playerItem)
self.playerController.showsPlaybackControls = false
self.playerController.player = self.player
self.addChildViewController(self.playerController)
self.view.addSubview(self.playerController.view)
self.playerController.view.frame = self.view.frame
self.view.addSubview(self.scrub)
self.player!.play()
然后退出控制器并返回上一个控制器:
self.player!.pause()
self.navigationController?.navigationBarHidden = false
navigationController?.popViewControllerAnimated(true)
在播放器中,我使用按钮从一个视频转到另一个视频:
self.player!.replaceCurrentItemWithPlayerItem(playerItem)
使用此更改视频但不会增加内存。事实上,它减少很多,然后回到正常水平所以我必须假设内存与控制器相关联,我一定错过了一些东西。
我有人可以解释它是如何工作的,这将非常有帮助。也许这完全正常,我什么都不担心,但如果不是,我会很乐意解决这个问题。 PS:我不得不说应用程序工作正常,我没有任何崩溃或任何事情。
由于
编辑/更新
在进入PlayerView控制器之前,我通常会分配大约25Mo的内存。一旦视频播放,我大约125Mo。
我设法通过在解除控制器之前将AVPlayer设置为nil来将此内存分配减少到大约75。我还从它的父控制器中删除了PlayerView层,但这对内存没有影响。
self.player!.pause()
self.playerController.player = nil
self.playerController.removeFromParentViewController()
self.navigationController?.navigationBarHidden = false
navigationController?.popViewControllerAnimated(true)