2015-10-04 5 views
1

Я использую Xcode 7, Swift и iOS 9.0.Как остановить утечку памяти AVQueuePlayer?

Если я ...

  • Создать 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, чтобы увидеть, если они получают деинициализируются ... И они это делают! Поэтому я понятия не имею, почему это происходит.

Использование инструментов Я вижу, что VM: данные инструмента исполнения - это то, что использует память, и оно никогда не освобождается.

У вас есть идеи, как высвободить память?

Что мне делать с AVQueuePlayer, чтобы освободить память?

ответ

0

Вам нужно позаботиться о выпуске текущих элементов массива массива: [AVPlayerItem]. Было бы лучше создать его как свойство класса. Из вашего кода таймер не является недействительным, и поэтому он сохраняет старый массив. Лучшей практикой является выпуск старого таймера перед созданием нового таймера.

Смежные вопросы