Нет, Core Data не изолирует контекст разработчика в смысле полной изоляции данных или объектов между различными потоками или экземплярами NSManagedObjectContext.
Каждый NSManagedObjectContext представляет собой "блокнот" для работы с данными из persistent store. Объекты (NSManagedObject) могут быть зарегистрированы в одном или нескольких контекстах.
Изоляция контекстов реализуется следующим образом:
save()) и другие контексты не "получат" эти изменения (например, через уведомления NSManagedObjectContextDidSaveNotification или механизм automaticallyMergesChangesFromParent).NSManagedObjectContext не является потокобезопасным. Доступ к контексту и его объектам должен осуществляться только из того потока или очереди, на которой был создан контекст. Core Data предоставляет механизмы для работы с контекстами в разных потоках:
mainQueueConcurrencyType: Контекст, привязанный к главной очереди. Используется для UI.privateQueueConcurrencyType: Контекст, работающий в собственной приватной очереди. Используется для фоновых операций.Взаимодействие между контекстами обычно происходит через сохранение и слияние изменений.
swift
Если использовать один и тот же объект NSManagedObject в разных потоках без proper Context-Thread affinity, это приведет к крашам. Для безопасной передачи объектов между контекстами используются NSManagedObjectID.
swift
Таким образом, Core Data обеспечивает конкурентный доступ с изоляцией на уровне контекста, а не на уровне данных или объектов, требованием работы с контекстом в его "родном" потоке/очереди. Разработчик сам отвечает за правильное управление потоками и синхронизацией между контекстами.