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