Ответ
В iOS применяют несколько уровней кеширования, от простого хранения в памяти до работы с файловой системой и сетью.
Основные методы:
-
NSCache— потокобезопасный контейнер, аналогичный словарю, который автоматически удаляет объекты при нехватки памяти. Идеален для временного хранения дорогих в создании объектов, например, декодированных изображений.let imageCache = NSCache<NSString, UIImage>() imageCache.setObject(decodedImage, forKey: "user_avatar") let cachedImage = imageCache.object(forKey: "user_avatar") -
URLCache— кеширование HTTP-ответов на уровнеURLSession. Позволяет снизить сетевой трафик и ускорить загрузку.let config = URLSessionConfiguration.default config.urlCache = URLCache( memoryCapacity: 10_000_000, // ~10 MB в RAM diskCapacity: 100_000_000, // ~100 MB на диске diskPath: "MyAppCache" ) let session = URLSession(configuration: config) -
Файловая система — ручное сохранение данных в директории
Caches/(для данных, которые можно пересоздать) иDocuments/(для пользовательских данных). Подходит для изображений, документов, аудио. -
Базы данных (
Core Data/SQLite) — для структурированных данных, требующих сложных запросов, сортировки и отношений.Core Dataтакже предоставляет встроенный кеш в видеNSManagedObjectContext. -
UserDefaults— подходит только для хранения небольших объемов простых типов данных (настройки, флаги). Не является производительным решением для кеширования. -
In-memory кеш (самописный) — использование структур данных вроде
Dictionaryдля хранения данных в рамках жизненного цикла объекта (например, ViewModel). Самый быстрый, но неустойчивый способ.
Выбор метода зависит от типа данных (бинарные, структурированные), требований к производительности, необходимости в инвалидации и доступного объема памяти/диска.
Ответ 18+ 🔞
Да ты посмотри, какие у них, блядь, в айфонах замуты с кешированием! Целая наука, ёпта, слоёный пирог из разных способов не гонять туда-сюда одно и то же. Разбираться — терпения ноль ебать, но если вникнуть — всё логично, как два пальца обоссать.
Вот на чём они там, сука, ездят:
-
NSCache— это типа умный словарь, который не доведёт до ручки, если память кончится. Сам, блядь, начнёт выкидывать старый хлам, чтобы новое влезло. Идеален, если ты, например, картинки декодируешь — работа пиздец ресурсоёмкая. Засунул в кеш — и потом просто достал, а не городил каждый раз.let imageCache = NSCache<NSString, UIImage>() imageCache.setObject(decodedImage, forKey: "user_avatar") let cachedImage = imageCache.object(forKey: "user_avatar") // О, сука, уже готово! -
URLCache— это когда ты сетевые запросы кешируешь. Сделал запрос, получил ответ — он прикрутил его куда надо. В следующий раз, когда ту же хуйню запросишь, он может тебе её из кеша подсунуть, даже интернет не трогая. Скорость — овердохуища!let config = URLSessionConfiguration.default config.urlCache = URLCache( memoryCapacity: 10_000_000, // ~10 МБ в оперативке diskCapacity: 100_000_000, // ~100 МБ на диске diskPath: "MyAppCache" ) let session = URLSession(configuration: config) // И поехали -
Файловая система — старый добрый способ, в рот меня чих-пых. Просто берёшь и пишешь данные в файл. Картинки, документы, мп3шки — всё туда. Только важно не накосячить с папками:
Caches/— для временного барахла, которое не жалко,Documents/— для ценного, что пользователь нагенерил. -
Базы данных (
Core Data/SQLite) — это когда у тебя не просто файлы, а целые связи, сортировки и поиски. Данные структурированные, как в аптеке.Core Data— это вообще отдельная песня, у него там свой встроенный кеш в контекстах, блядь. -
UserDefaults— а вот это, дружок, НЕ КЕШ! Это, блядь, помойка для мелких настроек: включён ли звук, логин запомнить или нет. Суешь туда что-то тяжёлое — приложение начнёт тормозить, как пьяный в говно. Доверия к нему в этом плане — ебать ноль. -
In-memory кеш (самописный) — самый простой и быстрый, как удар током. Завёл себе в памяти какую-нибудь
Dictionaryи пихаешь туда данные, пока жива твоя вьюмодель или сервис. Вырубил приложение — всё, пизда, кеш испарился. Зато скорость — хуй в пальто!
Какой выбрать? Да, бля, смотри по обстановке! Что кешируешь? Надолго ли? Места сколько есть? Нужно ли это искать или фильтровать? Ответы на эти вопросы и приведут тебя к нужному инструменту. Главное — не использовать UserDefaults не по назначению, а то получишь мартышлюшку вместо приложения.