> Что такое Core Data (iOS, Swift)

Уровень: junior · Роль: mobile · Категория: Технические вопросы

Компании: Masterdata, Яндекс

Стек: iOS, Swift

> Пример ответа

Короткий ответ

Core Data - это фреймворк от Apple для управления моделью данных в iOS-приложениях. Он позволяет сохранять, извлекать и фильтровать объекты, а также управлять их связями. Core Data - это не база данных, а слой персистентности, который может использовать SQLite, бинарный файл или in-memory хранилище. Он также предоставляет undo/redo, валидацию и интеграцию с SwiftUI и UIKit.

Подробное объяснение

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

  • NSManagedObjectContext - рабочая область, где вы создаёте и изменяете объекты. Все изменения временные, пока не вызван save().
  • NSPersistentStoreCoordinator - связывает контекст с хранилищем (SQLite, binary, in-memory).
  • NSManagedObject - базовый класс для всех сущностей. Вы создаёте подклассы через Xcode или вручную.
  • NSFetchRequest - запрос для выборки объектов с фильтрами, сортировкой и ограничениями.

Жизненный цикл данных: вы создаёте объект в контексте, изменяете его, затем сохраняете контекст - изменения записываются в хранилище. Если контекст не сохранён, изменения теряются при закрытии приложения.

Важно понимать: Core Data не заменяет SQL. Это объектно-ориентированный слой, который скрывает детали хранения. Вы работаете с объектами, а не с таблицами и запросами.

На практике

На junior-позиции от вас ожидают:

  • Умение создать модель данных через Xcode (редактор модели).
  • Базовые операции: создание, чтение, обновление, удаление (CRUD).
  • Понимание NSFetchRequest с предикатами (NSPredicate) и сортировкой (NSSortDescriptor).
  • Работа с контекстом: viewContext для main thread, performBackgroundTask для фоновых операций.
  • Умение настроить NSPersistentContainer - стандартный способ инициализации стека Core Data.

Типичный сценарий: приложение со списком задач. Вы создаёте сущность Task, сохраняете её, затем отображаете через NSFetchedResultsController или @FetchRequest в SwiftUI.

Пример кода

SWIFT
// Инициализация контейнера
let container = NSPersistentContainer(name: "MyModel")
container.loadPersistentStores { _, error in
if let error = error {
print("Ошибка загрузки: \(error)")
}
}
// Создание объекта
let context = container.viewContext
let task = Task(context: context)
task.title = "Купить продукты"
task.isCompleted = false
// Сохранение
do {
try context.save()
} catch {
print("Ошибка сохранения: \(error)")
}
// Запрос
let request: NSFetchRequest<Task> = Task.fetchRequest()
request.predicate = NSPredicate(format: "isCompleted == false")
request.sortDescriptors = [NSSortDescriptor(key: "createdAt", ascending: false)]
do {
let tasks = try context.fetch(request)
print(tasks.count)
} catch {
print("Ошибка запроса: \(error)")
}

Как отвечать на собеседовании

Начните с определения: "Core Data - это фреймворк для управления объектной моделью и персистентности данных". Затем перечислите основные компоненты: контекст, координатор, модель. Обязательно упомяните, что это не база данных, а абстракция над хранилищем. Приведите простой пример из практики: создание сущности, сохранение, выборка. Если спросят про фоновые операции - скажите про performBackgroundTask и важность не блокировать main thread.

Что проверяет интервьюер

  • Понимаете ли вы разницу между Core Data и SQLite.
  • Знаете ли вы основные классы и их ответственность.
  • Умеете ли вы выполнять CRUD-операции.
  • Понимаете ли вы жизненный цикл контекста и важность save().
  • Знаете ли вы, как работать с запросами и предикатами.

Типичные ошибки

  • Говорить "Core Data - это база данных" - это неверно, это слой персистентности.
  • Забывать про save() - изменения не сохранятся без вызова.
  • Использовать viewContext в фоновых потоках - это вызывает crash или гонки данных.
  • Не понимать разницу между NSManagedObjectContext и NSManagedObjectModel.
  • Путать NSFetchRequest с обычным SQL-запросом - в Core Data вы работаете с объектами, а не с таблицами.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью