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