1.2Kпросмотров
33.7%от подписчиков
18 марта 2026 г.
📷 ФотоScore: 1.3K
🔨 NSCache как базовый инструмент in‑memory кеширования на iOS
Забытый старичок NSCache - контейнер для in‑memory кеша в iOS c iOS 4, он сам умеет освобождать память по требованию системы и отлично себя зарекомендовал для этой задачи. Он ведёт себя похоже на Dictionary, но изначально спроектирован под сценарии «ускорить, но не сломать», когда cache‑miss всегда допустим. Что это даёт:
🟢Можно кэшировать тяжёлые объекты (разобранный rich text, изображения, результаты парсинга), не боясь утечек и переполнения памяти
🟢Система сама выкинет данные из кэша при нехватке памяти — без крашей и ручного менеджмента
⚠️ Корректность приложения не завязана на кэш: всё, что лежит в NSCache, можно безопасно пересоздать При работе с ним в современном окружении есть нюансы:
🟣NSCache работает только с классами (AnyObject): и ключ, и значение должны быть ссылочными типами; для Int/struct‑ов нужен boxing (NSNumber или свой класс‑обёртка)
🟣В проде почти всегда стоит задавать countLimit и totalCostLimit, иначе кэш может незаметно разрастись
🟣cost — это абстрактная метрика, а не байты: для текста можно брать length, для изображений —, например, ширина × высота, не стремясь к идеальной точности NSCache — отличный выбор для некритичного in‑memory кеширования «дорогих, но воспроизводимых» объектов внутри процесса, но для сети и данных, которые должны переживать перезапуск, его нужно сочетать с другими механизмами (например, URLCache и хранением на диске).