Мне нужно кэшировать изображения на диске, но ограничить их, скажем, до 20 изображений. Я пытаюсь Nuke
библиотека. Когда я бегу
Nuke.loadImage(with: url, options: options, into: imageView)
изображение кэшируется, пока я нахожусь внутри моего View Controller. Когда я покидаю просмотры, изображения в следующий раз загружаются снова. Так как же заставить Nuke
(или другую библиотеку) сохранить эти изображения для определенного количества изображений или времени.
Перед попыткой Nuke
я просто сохранял изображения в папке «Документы» приложения каждый раз, когда получаю изображение. Я уверен, что есть лучший способ.
Обновление: я смог сделать это с Kingfisher
.
func getFromCache(id: String) {
ImageCache.default.retrieveImage(forKey: id, options: nil) {
image, cacheType in
if let image = image {
self.galleryImageView.image = image
} else {
print("Not exist in cache.")
self.loadImage()
}
}
}
private func loadImage() {
ImageDownloader.default.downloadImage(with: url, options: [], progressBlock: nil) {
(image, error, url, data) in
if let image = image {
self.galleryImageView.image = image
ImageCache.default.store(image, forKey: id, toDisk: true)
}
}
}
Если я правильно понимаю, сначала retrieveImage
извлекает изображения из дискового кэша. Позже из кеша памяти. И это освобождает их только при получении предупреждения памяти. Я надеюсь, что это так. Боже, помоги нам.