iOS中KVO的多个类及其上下文

时间:2015-10-29 12:53:36

标签: ios avplayer key-value-observing kvocontroller

您好我在使用KVO观察AvPlayer状态,我在不同的控制器中使用AVPlayer实例,并观察它们使用KVO。(Ex家庭控制器有播放器及其观察者和类别控制器有播放器及其观察者等)。 我有一个集中的常量类,我把观察者的比赛放在:

static void const *kCurrentItemDidChangeKVO  = &kCurrentItemDidChangeKVO;
static void const *kRateDidChangeKVO         = &kRateDidChangeKVO;
static void const *kStatusDidChangeKVO       = &kStatusDidChangeKVO;

在每个控制器中我添加观察者:

 if (player != nil)
    {
        [player addObserver:self forKeyPath:@"rate"                            options:NSKeyValueObservingOptionNew context:&kRateDidChangeKVO];
        [player addObserver:self forKeyPath:@"currentItem.status"              options:NSKeyValueObservingOptionNew context:&kStatusDidChangeKVO];
        [player addObserver:self forKeyPath:@"currentItem.duration"            options:NSKeyValueObservingOptionNew context:&kDurationDidChangeKVO];
    }

并删除每个控制器中的观察者,如:

if (player != nil)
    {
            [player  removeObserver:self forKeyPath:@"rate" context:&kRateDidChangeKVO];
            [player  removeObserver:self forKeyPath:@"currentItem.status" context:&kStatusDidChangeKVO];
            [player  removeObserver:self forKeyPath:@"currentItem.duration" context:&kDurationDidChangeKVO];
    }

并且在每个AVPlayer中,当使用Constants文件中的相同上下文查看,访问,查看ViewWillAppeard或viewWillDissapeared时,添加和删除观察者。

我的问题是:对于包含玩家观察者的每个类,使用集中式Constants文件中的相同上下文,或者每个类是否都有自己对该类唯一的上下文,这很好吗?

非常感谢任何帮助。 问候

1 个答案:

答案 0 :(得分:1)

最佳使用:创建全局AVPlayer及其KVO并在应用程序中使用,因为它易于在后台和前台应用程序状态下管理并且易于使用。

注意:一次只能播放一个声音/视频,即使它对于不同的视图控制器不同,也要使用相同的全局AVPlayer。

怎么做?

在不同的视图控制器中使用全局AVPlayer的实例,简单的规则是删除AVPlayer的视图,然后再使用它在不同的视图控制器中添加。

使用不当:为每个难以处理的视图控制器创建一个新的AVPlayer及其KVO。