我有一个名为PGPlayer的AVPlayer包装器 . 每当我创建一个PGPlayer实例时:
PGPlayer *myPlayer = [PGPlayer new];
在我的PGPlayer类的init()方法中,我为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];
}
}
现在我选择一个视频并呈现一个视图控制器,我执行此任务 .
PROBLEM
现在我遇到的问题是:如果我创建了一个PGPlayer的实例,它设置了@ "status"观察者但是状态观察者还没有调用,在此之前我弹出视图控制器 . 在这种情况下,PGPlayer不会释放 . 但是如果我在同一个控制器上并且状态观察器被调用,之后我弹出视图控制器,它工作正常,我的PGPlayer被释放 . 请帮助
1 回答
我有一个类似(但相反)的问题,其中AVPlayerItem对象几乎从未被释放 .
如果我将AVPlayer,AVPlayerItem和AVPlayerItemVideoOutput子类化,并覆盖它们的dealloc例程,我可以看到AVPlayer和AVPlayerItemVideoOutput被释放,但AVPlayerItem(几乎)永远不会被释放 .