首页 文章

AVPlayerItem状态观察器保留AVPlayer

提问于
浏览
0

我有一个名为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 回答

  • 0

    我有一个类似(但相反)的问题,其中AVPlayerItem对象几乎从未被释放 .

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

相关问题