NSManagedObjectContext - это контейнер в памяти графа объектов вашего приложения, так же как постоянное хранилище (XML, SQLite и т. Д.) Обычно представляет контейнер на диске вашего графа объектов.
У этого подхода есть некоторые преимущества:
- Неисправность может быть применена к набору объектов или, в случае CoreData, к графу всего объекта
- Это удобная абстракция для принудительного выполнения приложением пакета операций ввода-вывода.
- Предоставляет единую точку контакта для эффективного выполнения операций над всем графом объектов (NSFetchRequests и т. Д.)
- Отмена может применяться к графу объектов, а не только к отдельным объектам.
Также важно помнить, что CoreData не является платформой ORM, это каркас персистентности объектов. Основная ответственность CoreData - сделать доступ к данным, хранящимся в постоянном формате на диске, более эффективным. Однако он не пытается эмулировать функциональность реляционных баз данных.
К вашему мнению о параллелизме, новые модели параллелизма были введены в предстоящем выпуске Mac OSX. Вы можете прочитать больше об этом на developer.apple.com.
В абстрактной модели модель параллелизма, выбранная для контекста управляемого объекта, больше связана со спецификой отдельного приложения, чем с самим шаблоном контекста. Экземпляры NSManagedObjectContext, как правило, никогда не должны совместно использоваться потоками.
Точно так же, как каждый поток требует своего собственного экземпляра NSAutoReleasePool, каждый поток также должен иметь свой собственный MOC. Таким образом, когда поток завершает выполнение, он может зафиксировать свои изменения в хранилище на диске и затем освободить контекст, освобождая всю память, потребляемую объектами, обработанными в потоке.
Это гораздо более эффективная парадигма, чем возможность отдельного контекста непрерывно потреблять системные ресурсы в течение жизненного цикла данного приложения. Конечно, это можно сделать, вызвав -reset также и для контекста, что приведет к тому, что все NSManagedObject, используемые контекстом, будут возвращены к ошибкам.