设置CoreData NSManagedObjectContext线程优先级

时间:2016-06-07 15:53:55

标签: ios multithreading core-data grand-central-dispatch

至少从iOS 9开始,未在主线程中运行的Core Data操作的唯一非弃用线程并发类型是NSPrivateQueueConcurrencyType。 我现在的问题是我想改变它的线程优先级,如下所示:

...:(int) neededPriority {
  _queue = dispatch_queue_create("Worker", DISPATCH_QUEUE_SERIAL);
  dispatch_set_target_queue(_queue,
    dispatch_get_global_queue(neededPriority, 0));

有时我需要高优先级,有时候需要低优先级。但是当我调用[_privateContext performBlock:...]时,我无法传递具有所需优先级的参数,也没有任何属性来设置其线程优先级。
因此我的问题是:有没有办法将上下文队列放入某个线程优先级?

1 个答案:

答案 0 :(得分:2)

NSManagedObjectContext个实例分配了队列,而不是线程。与performBlock例程关联的队列可以运行任意后台线程,因此您无法为上下文分配一般优先级。

相反,从performBlock块内部,您可以调用NSThread.setThreadPriority来更改处理该块的线程的优先级。

您可能希望在更改之前保存线程的优先级,并在块结束时将其重置。