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

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

Ответ

В iOS существует несколько механизмов хранения, каждый подходит для конкретных сценариев:

1. UserDefaults

  • Назначение: Хранение простых настроек и небольших данных (флаги, строки, числа).
  • Пример:
    // Запись
    UserDefaults.standard.set("username", forKey: "userKey")
    // Чтение
    let name = UserDefaults.standard.string(forKey: "userKey")
  • Почему: Это легковесное хранилище на основе property list (plist). Не подходит для больших или чувствительных данных.

2. Keychain

  • Назначение: Безопасное хранение конфиденциальной информации (пароли, токены, ключи).
  • Почему: Данные шифруются и защищаются на уровне системы. Надежнее, чем UserDefaults.

3. Файловая система (FileManager)

  • Назначение: Хранение больших или неструктурированных данных (изображения, документы, кэш).
  • Почему: Прямой доступ к файлам в директориях Documents, Caches или Temporary.

4. Core Data / SQLite

  • Назначение: Хранение сложных структурированных данных с отношениями, требующих мощных запросов и сортировок.
  • Почему: Это объектно-графовый и объектно-реляционный фреймворк. SQLite — его часто используемое персистентное хранилище.

5. Realm

  • Назначение: Альтернатива Core Data для работы со структурированными данными.
  • Почему: Часто предлагает более простой API и высокую производительность.

6. Оперативная память (RAM)

  • Назначение: Временное хранение данных в свойствах объектов, синглтонах или within the lifetime of a view controller.
  • Почему: Самый быстрый доступ, но данные теряются при перезапуске приложения или освобождении памяти.

Критерии выбора:

  • Объем данных: Маленький → UserDefaults, большой → Файлы/БД.
  • Безопасность: Высокая → Keychain.
  • Структура и запросы: Сложные → Core Data/Realm.
  • Персистентность: Временные → RAM, постоянные → другие варианты.