Какие методы кеширования данных используются в iOS?

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

Ответ

В iOS применяют несколько уровней кеширования, от простого хранения в памяти до работы с файловой системой и сетью.

Основные методы:

  1. NSCache — потокобезопасный контейнер, аналогичный словарю, который автоматически удаляет объекты при нехватки памяти. Идеален для временного хранения дорогих в создании объектов, например, декодированных изображений.

    let imageCache = NSCache<NSString, UIImage>()
    imageCache.setObject(decodedImage, forKey: "user_avatar")
    let cachedImage = imageCache.object(forKey: "user_avatar")
  2. URLCache — кеширование HTTP-ответов на уровне URLSession. Позволяет снизить сетевой трафик и ускорить загрузку.

    let config = URLSessionConfiguration.default
    config.urlCache = URLCache(
        memoryCapacity: 10_000_000, // ~10 MB в RAM
        diskCapacity: 100_000_000,  // ~100 MB на диске
        diskPath: "MyAppCache"
    )
    let session = URLSession(configuration: config)
  3. Файловая система — ручное сохранение данных в директории Caches/ (для данных, которые можно пересоздать) и Documents/ (для пользовательских данных). Подходит для изображений, документов, аудио.

  4. Базы данных (Core Data/SQLite) — для структурированных данных, требующих сложных запросов, сортировки и отношений. Core Data также предоставляет встроенный кеш в виде NSManagedObjectContext.

  5. UserDefaults — подходит только для хранения небольших объемов простых типов данных (настройки, флаги). Не является производительным решением для кеширования.

  6. In-memory кеш (самописный) — использование структур данных вроде Dictionary для хранения данных в рамках жизненного цикла объекта (например, ViewModel). Самый быстрый, но неустойчивый способ.

Выбор метода зависит от типа данных (бинарные, структурированные), требований к производительности, необходимости в инвалидации и доступного объема памяти/диска.