NSManagedObjectContext
, на который вы ссылаетесь, является скорее «блокнотом», чем подключением к базе данных.Объекты создаются, изменяются, уничтожаются в этой рабочей области и сохраняются («записываются в базу данных», если вы предпочитаете), когда вы указываете MOC сохранить состояние.Вы можете (и должны) init
и release
MOC, если вы работаете в отдельных потоках, но App Delegate делает MOC доступным, чтобы весь код, выполняемый в основном потоке, мог использовать один и тот же контекст.Это удобно и избавляет от необходимости обеспечивать синхронизацию нескольких MOC друг с другом.
Сохраняя NSArray
объектов Core Data, вы фактически дублируете его функциональные возможности.Есть ли какая-либо причина не работать с NSSet объектов базовых данных, предоставляемых MOC?
Если вы работаете асинхронно, вам не следует совместно использовать объект NSManagedObjectContext
между потоками, поскольку они не являются потоками-безопасный.Вместо этого создайте по одному для каждого потока, но установите для них одинаковые значения NSPersistentStoreCoordinator
.Это позволит сериализовать их доступ к постоянным данным, но вам нужно будет использовать уведомления, чтобы каждый из них узнал об изменениях других.
Существует хорошее руководство / описание по использованию Core Data в нескольких потоках.здесь: http://www.duckrowing.com/2010/03/11/using-core-data-on-multiple-threads/