Из каких основных компонентов состоит стек Core Data?

«Из каких основных компонентов состоит стек Core Data?» — вопрос из категории Базы данных, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Стек Core Data — это набор взаимосвязанных объектов, которые управляют объектной моделью и ее персистентностью. Основные компоненты:

  1. NSManagedObjectModel (Модель объектов):

    • Описывает схему данных (сущности, их атрибуты и взаимосвязи).
    • Обычно создается визуально в .xcdatamodeld файле или программно.
  2. NSPersistentStoreCoordinator (Координатор хранилищ):

    • Абстрагирует физическое хранилище данных (SQLite, XML, Binary, In-Memory).
    • Связывает модель (NSManagedObjectModel) с одним или несколькими хранилищами данных.
  3. NSManagedObjectContext (Контекст управляемых объектов):

    • Рабочая область («scratchpad») для создания, извлечения и изменения управляемых объектов (NSManagedObject).
    • Изменения в контексте не затрагивают хранилище, пока не будет вызван save().
    • Может быть разных типов: основной (main queue), приватный (background queue) или дочерний.

Пример инициализации с NSPersistentContainer (рекомендуемый способ):

let container = NSPersistentContainer(name: "DataModel")
container.loadPersistentStores { description, error in
    if let error = error {
        fatalError("Не удалось загрузить хранилище: (error)")
    }
}
let viewContext = container.viewContext // Контекст главной очереди для UI
let backgroundContext = container.newBackgroundContext() // Контекст для фоновых задач

Важные нюансы:

  • Потокобезопасность: Контексты привязаны к конкретным очередям. Все взаимодействия с объектами контекста должны происходить внутри его perform или performAndWait.
  • Типы хранилищ: NSSQLiteStoreType — для постоянного хранения, NSInMemoryStoreType — для тестирования (данные в RAM).
  • Миграции: Для сложных изменений схемы используется NSMappingModel и миграция с помощью NSMigrationManager.