Какие существуют стратегии кэширования данных в iOS-приложении?

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

Ответ

Выбор стратегии кэширования зависит от типа данных, объема и требований к производительности.

Тип данных Рекомендуемый способ Ключевые особенности
Изображения, бинарные данные NSCache Автоматически очищается при нехватке памяти, потокобезопасен.
Сетевые ответы (HTTP) URLCache через URLSession Кэширование на уровне HTTP, соответствует заголовкам Cache-Control.
Небольшие настройки, простые объекты UserDefaults / @AppStorage Подходит для примитивов и PropertyList-совместимых типов (< 1 МБ).
Сложные объекты, офлайн-данные Core Data / Realm / Файловая система Постоянное хранение, сложные запросы, миграции схемы.
Временные вычисления В памяти (словарь) Самый быстрый, но данные теряются при закрытии приложения.

Пример кэширования изображений с NSCache:

final class ImageCache {
    static let shared = ImageCache()
    private let cache = NSCache<NSString, UIImage>()

    private init() {
        cache.countLimit = 100 // Максимум 100 изображений
    }

    func get(for key: String) -> UIImage? {
        return cache.object(forKey: key as NSString)
    }

    func set(_ image: UIImage, for key: String) {
        cache.setObject(image, forKey: key as NSString)
    }
}

Важно: Для инвалидации кэша по времени или событию потребуется реализовать собственную логику поверх NSCache или URLCache.