Наблюдатель статуса AVPlayerItem сохраняет AVPlayer

У меня есть оболочка для AVPlayer под названием PGPlayer, поэтому всякий раз, когда я создаю экземпляр PGPlayer, например:

    PGPlayer *myPlayer = [PGPlayer new];

В методе init () моего класса PGPlayer я добавляю наблюдателя для keyPath «currentItem», например:

    [self addObserver:self forKeyPath:@"currentItem" options:NSKeyValueObservingOptionNew context:nil];

Теперь, когда вызывается этот наблюдатель, я добавляю наблюдателя состояния, например:

    [self.currentItem addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:nil];

И когда вызывается этот наблюдатель, я проверяю статус currentItem и, соответственно, добавляю наблюдателя времени, а playerItem добавляет таких наблюдателей, как:

    if([keyPath isEqualToString:@"status"]){
    if(self.currentItem.status == AVPlayerItemStatusReadyToPlay){
        [self addPlayerItemTimeObserver];
        [self addItemEndObserverForPlayerItem];
        [self.delegate status:AVPlayerItemStatusReadyToPlay];
    }
}   

Теперь я выбираю видео и представляю контроллер представления, в котором я выполняю эту задачу.
ПРОБЛЕМА
Теперь я столкнулся с такой проблемой: если я создаю экземпляр своего PGPlayer, и он устанавливает наблюдатель @ "status", но этот наблюдатель состояния еще не вызвал, и перед этим я открываю контроллер представления. В этом случае PGPlayer не освобождается. Но если я нахожусь на том же контроллере, вызывается наблюдатель состояния, и после этого я открываю контроллер представления, он работает нормально, и мой PGPlayer отключается. Пожалуйста, помогите


person Reckoner    schedule 05.02.2017    source источник


Ответы (1)


У меня аналогичная (но противоположная) проблема, когда объекты AVPlayerItem почти никогда не освобождаются.

Если я создаю подклассы AVPlayer, AVPlayerItem и AVPlayerItemVideoOutput и переопределяю их подпрограммы освобождения, я могу видеть, как освобождаются как AVPlayer, так и AVPlayerItemVideoOutput, но AVPlayerItem (почти) никогда не освобождается.

person Keith Knauber    schedule 03.03.2017