740просмотров
25.5%от подписчиков
11 марта 2026 г.
Score: 814
NSCache in Swift: Practical Guide ℹ️ NSCache — потокобезопасный кэш, который сам чистится под memory pressure. Статья разбирает типичные ошибки и лучшие подходы: от image caching до generic wrapper. Какие могу быть проблемы без использования враперов: ➡️ Keys/values только NSObject (NSString, не String)
➡️ Нет TTL (time‑to‑live)
➡️ Не generic let cache = NSCache<NSString, UIImage>()
cache.setObject(image, forKey: url as NSString) Автор берёт классический подход от Sundell и делает generic wrapper: final class Cache<Key: Hashable, Value> { private let wrapped = NSCache<WrappedKey, Entry>() func setObject(_ object: Value, forKey key: Key) { ... } func object(forKey key: Key) -> Value? { ... }
} ❗️ Главное — правильные лимиты: cache.totalCostLimit = 50 1024 1024 // 50MB для картинок
cache.countLimit = 100 // не больше 100 items
cache.setObject(img, forKey: key, cost: img.size.width * img.size.height) 🔴 Реальный кейс: tableView с аватарками. Супер фича — из кэша мгновенно, если нет — качаем и пихаем с cost. Когда мало памяти iOS сама вызывает removeAllObjects(). Никаких retain cycles, никаких GCD очередей. Когда это спасает:
✔️ Image lists (table/collection views)
✔️ ответы API (User, Post models)
✔️ тяжелый вычисления (image filters, ML predictions) Не путайте с:
❌ Disk cache → URLCache
❌ User data → CoreData