Литература кажется немного редкой в настоящее время о новых типах NSManagedObjectContext concurrency. Помимо WWDC 2011 vids и некоторой другой информации, которую я поднял по пути, мне все еще трудно понять, как используется каждый тип concurrency. Ниже я описываю, как я интерпретирую каждый тип. Пожалуйста, поправьте меня, если я что-то неправильно понимаю.
NSConfinementConcurrencyType
Этот тип был нормой в течение последних нескольких лет. MOC экранированы от каждой нити. Поэтому, если поток A MOC хочет объединить данные из MOC потока B с помощью сообщения сохранения, потоку A необходимо будет подписаться на уведомление о потоке B MOC.
NSPrivateQueueConcurrencyType
Каждое дерево MOC (родительские и дочерние MOC) разделяет одну и ту же очередь независимо от того, какой поток включен. Поэтому всякий раз, когда отправляется сообщение о сохранении из любого из этих контекстов, оно помещается в частную подсказку, специально созданную только для этого дерева MOC.
NSMainQueueConcurrencyType
Все еще запутано это. Из того, что я собираю, похоже на NSPrivateQueueConcurrencyType, только личная очередь запускается в потоке main. Я читал, что это выгодно для коммуникаций с MOC, но почему? Почему я должен выбирать это по типу NSPrivateQueueConcurrencyType? Я предполагаю, что, поскольку NSMainQueueConcurrencyType выполняется в основном потоке, не позволяет ли это выполнять фоновые процессы? Разве это не так, как не использовать потоки?