2017-02-05 14 views
0

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

PGPlayer *myPlayer = [PGPlayer new]; 

В методе Init() моего класса PGPlayer, я добавляю наблюдателю Ключевой путь "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 и устанавливает @ «статус» наблюдателя, но что статус наблюдателя еще не звонил и до того, что я поп контроллер представления. В этом случае PGPlayer не освобождается. Но если я нахожусь на одном контроллере, и вызывается статус наблюдателя, и после этого я выхожу на контроллер представления, он отлично работает и мой PGPlayer получает освобождение. Пожалуйста, помогите

ответ

0

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

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