Ответ
В iOS доступно несколько механизмов кэширования, выбор зависит от типа данных, объема и требований к производительности и персистентности.
Основные подходы:
-
NSCache— встроенный мутируемый коллекционный класс, автоматически очищающий объекты при нехватки памяти. Идеален для временного хранения дорогих в создании объектов (например, декодированных изображений).let imageCache = NSCache<NSString, UIImage>() imageCache.setObject(decodedImage, forKey: "user_avatar") let cachedImage = imageCache.object(forKey: "user_avatar") -
URLCache— кэш для сетевых запросов (URLSession). Хранит ответы (CachedURLResponse) по их запросам.let config = URLSessionConfiguration.default config.urlCache = URLCache(memoryCapacity: 20_000_000, diskCapacity: 100_000_000) -
Файловая система (Cache Directory) — для персистентного хранения больших данных (изображения, документы). Содержимое может быть удалено системой, но не во время работы приложения.
let cacheDir = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first! let fileURL = cacheDir.appendingPathComponent("cached_data.dat") -
Базы данных (Core Data, Realm, SQLite) — для структурированных данных, требующих сложных запросов, сортировки или отношений.
-
UserDefaults— подходит только для хранения очень небольших, простых значений (настроек, флагов), а не для полноценного кэширования данных.
Best Practice для изображений: часто используют двухуровневый кэш — NSCache (память) для быстрого доступа и файловая система (диск) для персистентности.