- (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.您可以将调度包装到您希望围绕此方法执行的工作的队列中.这将把观察的工作转移到高优先级队列.请确保您知道此工作可能在与触发观察的代码不同的线程/队列上运行.如果您正在观察的对象不是线程安全的,则需要在将其余工作分派到不同的队列之前检查它.
总结以上是内存溢出为你收集整理的objective-c – Grand Central Dispatch(GCD)Key-Value Observing(KVO)全部内容,希望文章能够帮你解决objective-c – Grand Central Dispatch(GCD)Key-Value Observing(KVO)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)