AVPlayerItem状态观察者保留AVPlayer

时间:2017-02-05 05:57:21

标签: ios avplayer dealloc avplayeritem

每当我创建一个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被解除分配。请帮助

1 个答案:

答案 0 :(得分:0)

我遇到类似(但相反)的问题,其中AVPlayerItem对象几乎从未被释放。

如果我将AVPlayer,AVPlayerItem和AVPlayerItemVideoOutput子类化,并覆盖它们的dealloc例程, 我可以看到AVPlayer和AVPlayerItemVideoOutput都被解除分配,但AVPlayerItem(几乎)永远不会被释放。