Ответ
Выбор зависит от типа, объема и требований к данным. Основные варианты:
| Технология | Назначение | Пример использования |
|---|---|---|
| UserDefaults | Простые настройки и флаги (логин, темы). | UserDefaults.standard.set(true, forKey: "isOnboardingCompleted") |
| Keychain | Безопасное хранение чувствительных данных (токены, пароли). | Использовать через Security framework или обертки вроде KeychainAccess. |
| Core Data | Сложные реляционные данные с объектным графом, требующие миграций, фильтрации. | Приложения с оффлайн-режимом (каталоги, заметки). |
| Realm | Альтернатива Core Data. Проще в освоении, но добавляет стороннюю зависимость. | Аналогично Core Data для проектов, где важна скорость разработки. |
| SQLite (через FMDB и т.д.) | Прямая работа с SQL, полный контроль. | Специфичные задачи, требующие сложных SQL-запросов. |
| FileManager | Работа с файлами (изображения, документы, кэш). | FileManager.default.urls(for: .documentDirectory, ...) |
Краткий гайд:
- Настройки пользователя → UserDefaults.
- Пароли/токены → Keychain.
- Структурированные данные для оффлайн-работы → Core Data или Realm.
- Кэшированные изображения/файлы → FileManager.