Ответ
Выбор стратегии кэширования зависит от типа данных, объема и требований к производительности.
| Тип данных | Рекомендуемый способ | Ключевые особенности |
|---|---|---|
| Изображения, бинарные данные | 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.