Использование запросов на выборку в фоновых потоках с Core Data - PullRequest
2 голосов
/ 08 марта 2012

Я хочу использовать один ManagedObjectContext для основного потока, а другой, отдельный для фонового потока, используя NSOperation, как предлагает Apple.И каждый ManagedObjectContext использует одно и то же постоянное хранилище.

Извлечение может произойти в главном потоке, потому что я использую Базовые данные для заполнения табличного представления.

В фоновом режиме мне нужно получить доступ к свойству NSManagedObject, в котором хранится имя изображения.Затем фоновый поток будет создавать и кэшировать эти изображения, что является основной причиной наличия фонового потока.

Учитывая это, существует ли опасность (например, блокировка), если оба потока пытаются получить доступ к постоянному хранилищу,оба могут получать данные с него одновременно?

Ответы [ 3 ]

1 голос
/ 08 марта 2012

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

0 голосов
/ 08 марта 2012

Два разных MOC могут одновременно обращаться к одному и тому же PSC для чтения.

Однако для записи вам необходимо lock и unlock ваш постоянный координатор хранилища, если есть вероятность одновременной записи.

0 голосов
/ 08 марта 2012

Пока каждый поток использует свой собственный NSManagedObjectContext, совершенно безопасно, чтобы они разделяли NSPersistentStoreCoordinator. NSManagedObjectContext будет выполнять все необходимые блокировки постоянного хранилища по мере необходимости. Однако вы должны быть осторожны, чтобы не делить NSManagedObject s между потоками.

...