Ответ
NSCache — это изменяемая коллекция, которая автоматически удаляет объекты при нехватке памяти в системе (реагирует на уведомления о memory pressure). Точное время жизни объекта не гарантируется.
Основные механизмы управления:
- Автоочистка по памяти: Основная особенность. Кэш очищается системой, когда приложение получает предупреждение о нехватке памяти.
- Лимиты: Вы можете задать дополнительные ограничения.
countLimit: Максимальное количество объектов.totalCostLimit: Максимальная "стоимость" всех объектов в кэше. Стоимость задаётся при добавлении (setObject(_:forKey:cost:)).
- Поведение при достижении лимита: Удаление наименее используемых объектов происходит не сразу, а по усмотрению кэша.
Пример использования:
let imageCache = NSCache<NSString, UIImage>()
imageCache.name = "ImageCache"
imageCache.countLimit = 100
imageCache.totalCostLimit = 50 * 1024 * 1024 // 50 МБ
// Добавление с указанием "стоимости" (например, размер данных)
if let imageData = image.pngData() {
imageCache.setObject(image, forKey: "profilePic", cost: imageData.count)
}
// Получение
if let cachedImage = imageCache.object(forKey: "profilePic") {
// Использовать изображение
}
// Удаление
imageCache.removeObject(forKey: "profilePic")
Важно: NSCache не является потокобезопасным. Доступ к нему из нескольких потоков должен быть синхронизирован.