加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – Grand Central Dispatch(GCD)Key-Value Observin

发布时间:2020-12-14 17:11:54 所属栏目:百科 来源:网络整理
导读:我有一个添加观察者的方法: - (void) method{ [currentPlayer addObserver:self forKeyPath:@"some" options:some context:some];} 所有更改都以这些方法处理: - (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictio
我有一个添加观察者的方法:

- (void) method
{
    [currentPlayer addObserver:self forKeyPath:@"some" options:some context:some];
}

所有更改都以这些方法处理:

- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

如果我将我的方法修改为:

- (void) method
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0),^{
        [currentPlayer addObserver:self forKeyPath:@"some" options:some context:some];
    });
}

这是否意味着 – (void)observeValueForKeyPath …将在DISPATCH_QUEUE_PRIORITY_HIGH中工作?

附:我希望KVO能够在DISPATCH_QUEUE_PRIORITY_HIGH中工作.

编辑:

我观察AVPlayer变量.如:

[currentPlayer addObserver:self forKeyPath:@"currentItem.loadedTimeRanges" options:NSKeyValueObservingOptionNew context:kTimeRangesKVO];

这些变量会自动更改.

每次调用“observeValueForKeyPath”时我都会检查队列,它仍然是dispatch_get_main_queue(),我不知道如何将其更改为其他队列.

解决方法

作为观察者,您无法控制调用哪个线程/队列observeValueForKeyPath.您可以将调度包装到您希望围绕此方法执行的工作的队列中.这将把观察的工作转移到高优先级队列.

请确保您知道此工作可能在与触发观察的代码不同的线程/队列上运行.如果您正在观察的对象不是线程安全的,则需要在将其余工作分派到不同的队列之前检查它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读