Я создаю NSManagedObjectContext
в частной очереди для обработки обновлений данных, которые я беру из файлов и/или служб:
NSManagedObjectContext *privateContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
privateContext.persistentStoreCoordinator = appDelegate.persistentStoreCoordinator;
Поскольку я использую приватную очередь, я не совсем понимаю разницу между методами performBlock:
и performBlockAndWait:
... Для выполнения моих обновлений данных я сейчас делаю это:
[privateContext performBlock: ^{
// Parse files and/or call services and parse
// their responses
// Save context
[privateContext save:nil];
dispatch_async(dispatch_get_main_queue(), ^{
// Notify update to user
});
}];
В этом случае мои обновления данных выполняются синхронно и последовательно, поэтому я полагаю, что это правильное место для сохранения контекста, не так ли? Если я сделаю что-то не так, я буду признателен, если вы сообщите мне об этом. С другой стороны, будет ли этот код эквивалентен?:
[privateContext performBlockAndWait: ^{
// Parse files and/or call services and parse
// their responses
// Save context
[privateContext save:nil];
}];
// Notify update to user
Снова я предполагаю, что это правильное место для сохранения контекста... Каковы различия между обоими методами (если они есть, в данном случае)?
Что делать, если вместо выполнения синхронных служебных вызовов или разбора файлов мне необходимо выполнить асинхронные вызовы служб? Как управлять этими обновлениями данных?
Заранее спасибо