Достаточно ли очереди отправки GCD, чтобы ограничить контекст Core Data одним потоком

Я начинаю думать, что ответ на мой вопрос - «Нет», но я все еще смущен и не уверен в этом. Пожалуйста, подтвердите. Я уже понял, что нужно быть осторожным при использовании Core Data с несколькими потоками. Объекты NSManagedObjectContext не должны пересекать границы потока. Будучи новичком в работе с потоками и Core Data, я с радостью обнаружил, что GCD должен облегчить некоторые из этих задач.

Возможно, наивно, но тогда я подумал, что просто создам выделенную диспетчерскую очередь GCD для работы с Core Data (или даже, если необходимо, создаю несколько диспетчерских очередей, каждая со своим собственным основным контекстом данных). Это было бы просто.

Но теперь я понимаю, что одним из больших преимуществ диспетчерских очередей GCD является то, что они управляют и используют несколько потоков по мере необходимости.Итак, если я правильно понимаю, задачи, которые я передаю одной и той же очереди отправки, могут в конечном итоге выполняться в разных потоках, потенциально передавая основной контекст данных из одного потока в другой, и что-то пойдет не так. Правильно?

Я прочитал много связанных вопросов и ответов, например, Core Data and Thread / Grand Central Dispatch , но я все еще несколько запутался. Принятый ответ на этот вопрос с использованием очередей GCD гарантирует создание нового контекста в каждом потоке, но не указывает на необходимость этого. Другой ответ гласит: «Вы можете выполнить всю работу CoreData в очереди с именем com.yourcompany.appname.dataaccess», что, по-видимому, подразумевает, что до тех пор, пока работа Core Data ограничена одной очередью отправки GCD, все в порядке. Может быть, это не так.

15
задан Community 23 May 2017 в 12:18
поделиться