Какие основные способы хранения данных в iOS?

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

Ответ

Выбор способа зависит от объёма, структуры и чувствительности данных.

Способ Назначение Ключевые особенности
UserDefaults Простые настройки, флаги, небольшие значения. Простой API, хранит Property List (plist). Не для конфиденциальных или больших данных.
Keychain Services Пароли, токены, криптографические ключи. Безопасное хранилище на уровне системы. Используйте через Security.framework или обёртки (например, KeychainAccess).
Core Data Сложные объектные графы с отношениями, локальная БД. Объектно-графовый и persistence-фреймворк от Apple. Использует SQLite, XML, бинарный формат.
Realm Альтернатива Core Data для сложных данных. Собственный движок БД, часто быстрее Core Data, простой Swift/Obj-C API.
SQLite (прямой) Полный контроль над SQL-запросами и схемой. Лёгкая встраиваемая БД. Используйте библиотеки-обёртки: FMDB (Obj-C), GRDB.swift (Swift).
Файловая система Изображения, документы, кэш, большие бинарные данные. Используйте FileManager для работы с директориями (Documents, Library/Caches, tmp).
Архивация (Codable/NSCoding) Сохранение кастомных объектов в файл или UserDefaults. Codable — современный Swift-способ сериализации в JSON/Property List.

Практические примеры:

UserDefaults:

UserDefaults.standard.set(true, forKey: "isDarkModeEnabled")
let value = UserDefaults.standard.bool(forKey: "isDarkModeEnabled")

Сохранение в файл через Codable:

struct Settings: Codable { var theme: String }
let settings = Settings(theme: "dark")
let url = FileManager.default
    .urls(for: .documentDirectory, in: .userDomainMask)[0]
    .appendingPathComponent("settings.json")
let data = try JSONEncoder().encode(settings)
try data.write(to: url)