如果我使用KVO观察我的播放器项目:
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:url];
[playerItem addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:MyClassKVOContext];
[playerItem addObserver:self forKeyPath:@"playbackBufferEmpty" options:NSKeyValueObservingOptionNew context:MyClassKVOContext];
[playerItem addObserver:self forKeyPath:@"playbackLikelyToKeepUp" options:NSKeyValueObservingOptionNew context:MyClassKVOContext];
[playerItem addObserver:self forKeyPath:@"loadedTimeRanges" options:NSKeyValueObservingOptionNew context:MyClassKVOContext];
两个问题:
1)项目结束后我是否需要删除观察者? (即在AVPlayerItemDidPlayToEndTimeNotification
)
2)如果我打电话给[_avQueuePlayer removeAllItems]
它是否也删除了每个项目的观察者?
答案 0 :(得分:1)
制作你的玩家对象(AVPlayerItem * playerItem)全局并设置其属性并合成它。
1)项目结束后我是否需要删除观察者? (即在AVPlayerItemDidPlayToEndTimeNotification中)
是的,当您要将该视图控制器放在该播放器正在播放的位置时,您需要移除所有观察者。不是在比赛结束后。
2)如果我调用[_avQueuePlayer removeAllItems]它是否也会删除每个项目的观察者?
是的,它会删除为该全局变量设置的所有观察者。