Основные данные и Grand Central Dispatch? - PullRequest
0 голосов
/ 28 апреля 2011

Можно ли использовать базовые данные NSManagedObject таким образом, в пределах блоков GCD, где они не взаимодействуют, если я знаю, что больше ничего не происходит (т.е. моя программа только выполняет эту обработку GCD для данных в этот момент ввремя)?

Предположительно NSManagedObject не подходит для использования с потоками.Однако это неясно для меня.Это может быть небезопасно из-за возникающей ошибки (поэтому данные на самом деле не являются неизменяемыми), однако эта ошибка не должна влиять на другие данные NSManagedObject в памяти.Если только не произойдет сбой данных, выйдет других NSManagedObjects, пока я их использую.Может ли это случиться?

Если говорить более конкретно, я говорю о чем-то вроде получения набора всех NSManagedObjects (NSNumbers) в узле моего графа объекта Core Data и добавления 1 к каждому из них.

1 Ответ

2 голосов
/ 28 апреля 2011

Вам просто нужно убедиться, что (1) каждый поток / операция имеет свой уникальный контекст управляемого объекта и (2) вы в конечном итоге объединяете изменения со всеми другими одновременно активными контекстами.

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

...