Ответ
Плюсы:
- Автоматическое освобождение памяти при нехватке (GC удалит объекты, на которые нет сильных ссылок).
- Удобно для кэширования временных данных (например, Bitmap в ImageLoader).
Минусы:
- Нет гарантии, что объект будет в кэше (может быть удалён GC в любой момент).
- Сложность отладки (непредсказуемость времени жизни объектов).
- Не подходит для критичных данных, которые должны сохраняться.
Пример:
val weakCache = mutableMapOf<String, WeakReference<Bitmap>>()
// Добавление
weakCache["key"] = WeakReference(bitmap)
// Получение
val cachedBitmap = weakCache["key"]?.get()
if (cachedBitmap == null) {
// Пересоздать или загрузить заново
}
Итог: Используйте для неважных данных, где потеря кэша допустима. Для надёжности лучше LruCache.