Какие есть способы сохранения данных в iOS
Что проверяют
Знаете ли вы весь набор и выбираете ли хранилище по типу данных, а не по привычке.
Как отвечать
По назначению:
UserDefaults: небольшие настройки и предпочтения. Это словарь, целиком загружаемый в память, поэтому крупные данные туда класть нельзя. Секреты категорически нельзя: файл читается из резервной копии;- Keychain: единственное место для токенов, паролей и ключей. Шифруется системой, может переживать переустановку приложения и синхронизироваться через связку ключей. API неудобный, обычно берут обёртку;
- файлы в песочнице: каталог документов для пользовательских данных, попадающих в резервную копию, каталог кэшей для восстановимого (система может его очистить при нехватке места), временный каталог для промежуточного. Крупные загруженные файлы кладут в кэши или помечают исключением из резервной копии, иначе бэкап пользователя раздувается;
- Core Data: объектный граф поверх SQLite с отслеживанием изменений, связями, миграциями и наблюдением за выборками. Подходит, когда данных много и нужны запросы;
- SwiftData: современная надстройка с декларативным описанием моделей;
- SQLite напрямую или через обёртку: полный контроль над запросами, когда объектная модель мешает;
Codableв JSON или списки свойств: простой способ сохранить структуру в файл. Хорош для небольших наборов, но не даёт запросов и частичной загрузки;- CloudKit для синхронизации между устройствами пользователя.
Правило выбора: настройки в предпочтения, секреты в связку ключей, структурированные данные с выборками в базу, файлы в файловую систему, кэш в каталог кэшей.
Что стоит добавить про безопасность: у файлов есть классы защиты данных, определяющие доступность при заблокированном устройстве. Для чувствительных данных выбирают строгий класс, иначе фоновая задача не сможет их прочитать, и это надо учитывать заранее.
Где спотыкаются
Хранят токен в предпочтениях вместо связки ключей.
Кладут большие данные в предпочтения и замедляют запуск.
Держат загруженные файлы в документах и раздувают резервную копию.
Берут полноценную базу там, где хватило бы одного файла.