Разница между save: and processPendingChanges: в CoreData

У меня есть NSManagedObjectContext, я делаю пару изменений в модели, а затем... "совершать" транзакции, какая разница между ними:

[context save:&error];

и

[context processPendingChanges];

Кажется, они оба делают то же самое.

Ответ 1

В двух словах, processPendingChanges изменяет состояние текущего графа объектов. save сохранит текущий граф объекта на диск.

Вызов save автоматически вызовет processPendingChanges.

Если вы думаете о текстовом файле в текстовом процессоре, save аналогичен сохранению документа на диске.

processPendingChanges аналогичен тому, как текстовый процессор обновляет внутреннее состояние документа после редактирования, но без сохранения на диск. Обычно это запускает обновления для пользовательского интерфейса, такие как обновление отображаемого слова или количества строк, выполнение любого необходимого форматирования и т.д.

По моему опыту, для iPhone вам редко нужно processPendingChanges. Я считаю, что он в основном предназначен для Mac OS X и обрабатывает расширенное или сложное управление отменой или обновление привязок интерфейса.

Для iPhone это обычно делается для запуска NSFetchedResultsControllers для обновления представлений таблиц. Даже тогда это несколько редок. Если вы не уверены, что просто придерживайтесь save

Для получения дополнительной информации перейдите к изучению разницы между NSManagedObjectContextDidSaveNotification и NSManagedObjectContextObjectsDidChangeNotification в документах.