【发布时间】:2015-10-29 12:53:35
【问题描述】:
您好,我使用 KVO 来观察 AvPlayer 状态,我在不同控制器中使用 AVPlayer 实例,并使用 KVO 观察它们。(前家庭控制器有播放器及其观察者,类别控制器有播放器及其观察者等)。 我有一个集中的常量类,我把观察比赛放在里面:
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 中,当使用来自常量文件的相同上下文查看、访问、viewWillAppeard 或 viewWillDissapeared 时,我添加和删除观察者。
我的问题是:可以为每个包含玩家观察者的类使用集中常量文件中的相同上下文,还是每个类都应该有自己的对该类唯一的上下文?
非常感谢任何帮助。 问候
【问题讨论】:
-
最好的用途是创建一个全局 AVPlayer 及其 KVO 并在应用程序中使用,因为它可以在应用程序的后台和前台状态中轻松管理,而不是为每个视图创建一个新的 AVPlayer 及其 KVO控制器是不好的使用习惯。
标签: ios avplayer key-value-observing kvocontroller