Ответ
Core Data — это не база данных, а фреймворк для управления объектным графом и его сохранности. Хотя он часто использует SQLite как бэкенд-хранилище, его абстракция работает на уровне объектов, а не таблиц.
Ключевые отличия:
| Аспект | Core Data | База данных (например, SQLite) |
|---|---|---|
| Уровень абстракции | Объектная модель (сущности, связи) | Реляционные таблицы, строки, столбцы |
| Основная задача | Управление жизненным циклом объектов в памяти, их связями и сохранением | Хранение и эффективный запрос структурированных данных |
| Запросы | NSFetchRequest с NSPredicate (объектно-ориентированный) |
Язык SQL (декларативный, реляционный) |
| Изменения в памяти | Автоматическое отслеживание, откат (undo), валидация | Не отслеживаются, требуют явных команд UPDATE/INSERT |
Пример выборки:
let request: NSFetchRequest<User> = User.fetchRequest()
request.predicate = NSPredicate(format: "name == %@", "John")
request.sortDescriptors = [NSSortDescriptor(key: "name", ascending: true)]
let users = try? context.fetch(request)
Когда использовать Core Data:
- Приложение следует парадигме Model-View-Controller (MVC) Apple.
- Нужны сложные связи между объектами (один-ко-многим, многие-ко-многим).
- Требуется встроенная поддержка отмены операций или поэтапной миграции схемы.
Когда рассмотреть прямую работу с SQLite:
- Критична максимальная производительность на сложных JOIN-запросах.
- Данные имеют простую структуру, а объектная модель избыточна.
- Необходим прямой контроль над SQL-запросами и схемой.