如何阻止AVQueuePlayer内存泄漏?

时间:2015-10-04 11:46:02

标签: ios swift memory memory-leaks ios9

我正在使用Xcode 7,Swift和iOS 9.0。

如果我......

  • 使用一些项目创建AVQueuePlayer
  • 开始播放
  • 然后 removeAllItems() ......内存不会被释放。

如果调用此函数,它会开始占用内存:

var queuePlayer: AVQueuePlayer!

func startAgain(){

    if queuePlayer != nil{
        queuePlayer.pause()
        queuePlayer.removeAllItems()
        queuePlayer = nil
    }

    var items: [AVPlayerItem] = []

    for _ in 1 ... 10 {
        items.append(AVPlayerItem(URL: NSBundle.mainBundle().URLForResource("Music", withExtension: "mp3")!))
    }

    queuePlayer = AVQueuePlayer(items: items)
    queuePlayer.play()

    NSTimer.scheduledTimerWithTimeInterval(5, target: self, selector: "startAgain", userInfo: nil, repeats: false)
}

我甚至将 AVPlayerItem AVURLAsset 子类化,以查看它们是否已被取消初始化......而且他们会这样做!所以我不知道为什么会这样。

使用Instruments我可以看到 VM:性能工具数据正在使用内存,它永远不会被释放。

你有什么想法如何释放记忆?

我应该怎样处理AVQueuePlayer才能释放内存?

1 个答案:

答案 0 :(得分:0)

您需要注意释放当前数组var项:[AVPlayerItem]。将它创建为类属性会更好。从您的代码中,计时器不会失效,因此它保留旧数组。最佳做法是在创建新计时器之前释放旧计时器。