3

根据 WWDC 2012 视频,“Core Data Best Practices”,dispatch_sync应该用于在上下文中运行某种回调performBlock,它被创建为NSPrivateQueueConcurrencyType.

这是为什么?

我可以使用dispatch_async(dispatch_get_main_queue(), 0)... 在私有队列的上下文中调用一些与 UI 相关的回调performBlock吗?

4

2 回答 2

4

不。 NSPrivateQueueConcurrencyType管理它自己的内部队列,并且不喜欢你试图让其中一个线程去做你想做的事情(事实上,我相信当这种行为发生时它会抛出异常)。有几种方法可以处理这个问题,当然信号量是更可接受的设计模式以获得真正的“异步感觉”,但正如您所注意到的,dispatch_sync通常是要走的路。

于 2012-11-20T07:53:49.287 回答
0

谷歌把我带到了这里,所以如果有人像我一样对这些东西不熟悉,并且会从代码示例中受益,这里有一个:

__block dispatch_queue_t currentQ =  dispatch_get_current_queue();

[managedObjectContext performBlock:^{

    //do the stuff you need to do in a background thread

    dispatch_sync(currentQ, ^(){

        //callback code for once the background stuff is complete

    });
}];
于 2013-07-07T05:11:41.770 回答