Кэширование - мощный инструмент, который почему-то часто упускают из виду. А ведь это идеальное решение для временного хранения данных без лишних запросов к сети или базе.
Что такое NSCache:
NSCache - встроенный в
iOS механизм кэширования, который автоматически освобождает память при нехватке ресурсов. Но есть нюанс: он работает только с классами, наследующими
NSObject.
Решение: обертка вокруг
NSCache, которая позволяет использовать любые типы данных, включая структуры.
final class Cache {
private let wrapped = NSCache()
// реализация подписки, вставки и удаления
}
Жизненный цикл данных:
Чтобы избежать устаревших данных, добавим автоматическую инвалидацию по времени:
struct Entry {
let value: Value
let expirationDate: Date // Удаляем данные после истечения срока
}
Сохранение на диск:
Для оффлайн-доступа к данным расширяем кэш поддержкой
Codable и сохраняем в файлы:
extension Cache: Codable where Key: Codable, Value: Codable {
func saveToDisk(name: String) throws {
let data = try JSONEncoder().encode(self)
try data.write(to: cachesDirectory.appendingPathComponent(name))
}
}
Когда это полезно:
- Повторное использование данных (например загруженных товаров в интернет магазине).
- Оффлайн-режим: доступ к последним данным после перезапуска.
- Оптимизация производительности: меньше запросов к серверу.
Вывод:
Кэширование - не просто «сохранить и забыть». Это баланс между скоростью, актуальностью данных и управлением памятью.