Кэширование — мощный инструмент, который почему-то часто упускают из виду. А ведь это идеальное решение для временного хранения данных без лишних запросов к сети или базе.
🤔 Что такое NSCache?
NSCache — встроенный в iOS механизм кэширования, который автоматически освобождает память при нехватке ресурсов. Но есть нюанс: он работает только с классами, наследующими NSObject.
Решение: обертка вокруг NSCache, которая позволяет использовать любые типы данных, включая структуры.
final class Cache<Key: Hashable, Value> {
private let wrapped = NSCache<WrappedKey, Entry>()
// реализация подписки, вставки и удаления
}
⚠️ Жизненный цикл данных.
Чтобы избежать устаревших данных, добавим автоматическую инвалидацию по времени:
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))
}
}
✅ Когда это полезно:
🔹 Повторное использование данных (например загруженных товаров в интернет магазине).
🔹 Оффлайн-режим: доступ к последним данным после перезапуска.
🔹 Оптимизация производительности: меньше запросов к серверу.
💡 Вывод:
Кэширование — не просто «сохранить и забыть». Это баланс между скоростью, актуальностью данных и управлением памятью.
➡️ Подписаться на канал
Мобильный трудоголик