Действительно ли NSPersistentStoreCoordinator ориентирован на многопотоковое исполнение?

Я работаю над приложением для iPhone, которое использует Базовые Данные. Приложение звонит веб-сервису, анализирует получающийся XML-файл, и затем создает или изменяет Базовые Объекты данных в моем приложении. Я уже обрабатываю вызов веб-сервиса и анализирующий асинхронно, но я возвращал проанализированные данные основному потоку для управления Базовыми Объектами данных. Я хотел бы работать, этот процесс в фоновом режиме распараллеливают также. (1-2 вторых паузы не делают для большого пользовательского опыта),

Очевидный подход должен был бы создать контекст управляемого объекта специально для фонового потока, но тогда я считал эту строку в Базовом Руководстве по программированию Данных Apple:

Персистентный координатор хранилища предоставляет его контекстам управляемого объекта фасад одного виртуального хранилища. Для абсолютно параллельных операций Вам нужен другой координатор для каждого потока.

Таким образом, вот выгода: Вы не можете иметь два NSPersistentStoreCoordinators обеспечение доступа к тому же хранилищу. Но, Базовый Справочник Marcus Zarra утверждает это NSPersistentStoreCoordinator ориентировано на многопотоковое исполнение и сериализирует запросы ввода-вывода (стр 157).

Кто-то может разрешить это для меня? Действительно ли возможно иметь второй контекст управляемого объекта, работающий на отдельном потоке, совместно использующем то же NSPersistentStoreCoordinator с основным потоком? Или, более кратко, NSPersistentStoreCoordinator ориентированный на многопотоковое исполнение?

10
задан Alex 29 December 2009 в 18:13
поделиться

2 ответа

Позже Zarra указывает, что контекст блокирует хранилище, поэтому можно использовать один и тот же NSPersistentStoreCoordinator через потоки .

Хотя NSPersistentStoreCoordinator не является резьбонадежный NSManagedObjectContext умеет запирайте его надлежащим образом при использовании. Поэтому мы можем прикрепить столько NSManagedObjectContext объекты на a единственный NSPersistentStoreCoordinator в качестве Мы хотим, не опасаясь столкновения.

17
ответ дан 3 December 2019 в 20:04
поделиться

Возможно ли выполнение второго контекста управляемого объекта на отдельном потоке, разделяющем NSPersistentStoreCoordinator с основным потоком?

Да! Я рекомендую внимательно прочитать соответствующий раздел книги Zarra, прежде чем приступать к многопоточному доступу к CoreData.

Или, если говорить коротко, является ли NSPersistentStoreCoordinator потоковым безопасным?

Ну, слово `thread-safe` имеет оттенки смысла в Apple doc, так что будьте очень осторожны! Смотрите эту статью в блоге для получения хорошего объяснения.

2
ответ дан 3 December 2019 в 20:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: