Безопасно ли выполнять операции сохранения над объектом NSManagedContext при использовании быстрого перечисления Objective C
Мне было интересно, если этот вид кода будет в порядке, чтобы использовать
NSManagedObjectContext *moc = [(AppDelegate*)[[UIApplication sharedApplication] delegate] managedObjectContext];
for (NSDictionary *dict in objects) {
Object *object = [NSEntityDescription insertNewObjectForEntityForName:@"object"
inManagedObjectContext:moc];
// Populate model fields with appropriate dictionary keys
}
Причина, по которой я спрашиваю, заключается в том, что вам не рекомендуется передавать ссылки на объект контекста управляемого объекта между потоками, и вам интересно, действительно ли это происходит здесь.
3 ответа
Быстрое перечисление с использованием for (object in collection)
не имеет ничего общего с потоками. Весь этот код выполняется в одном потоке.
Вы используете один ManagedObjectContext, в вашем коде нет проблем с потоками. Вы делаете это правильно. Весь код является последовательным. Если вы хотите использовать несколько контекстов, каждый в потоке, вы должны позаботиться о многопоточности.
Если эта операция вставки является многопоточной, вам следует подумать о создании фонового NSManagedObjectContext для ее обработки, который слишком велик для публикации и на SO до него уже отвечали.