想知道有没有人遇到过类似的问题。所以我使用 AlamofireImage 进行图像缓存。但是,有时当我加载应该缓存的图像时,找不到它。行为非常零星。
为了检查图像是否被缓存,我在
cachedImages
中的AutoPurgingImageCache
数组上添加了这个didSet打印语句:
private var cachedImages: [String: CachedImage] {
didSet {
print("*** CACHED IMAGES: \(cachedImages)")
}
}
对于我的示例,这是我最初从网格视图存储大量图像时的打印输出的一部分:
["https://assetsprx.acomp.com/img/product/414/1512714_1.jpg": AlamofireImage.AutoPurgingImageCache.CachedImage,
"https://assetsprx.acomp.com/img/product/600/1511378_1.jpg": AlamofireImage.AutoPurgingImageCache.CachedImage]
现在,当我尝试获取图像时,几乎总是能正确检索它们。我在检索方法中检索它们时添加了打印语句(我们使用 url 的最后一部分来提取标识符——您可以在下面的打印语句中看到结果):
func cachedImage(for url: URL?) -> UIImage? {
guard let url = url,
let imageCode = url.absoluteString.components(separatedBy: "/").last else {
return nil
}
if let cachedImage = imageDownloader.imageCache?.image(withIdentifier: imageCode) {
print("&&& FROM DOWNLOADER: FOUND \(imageCode)")
return cachedImage
} else {
print("&&& FROM DOWNLOADER: FAILED \(imageCode)")
}
let urlRequest = URLRequest(url: url)
return largeCachedImage(for: urlRequest)
}
通常的回应是这样的:
&&& FROM DOWNLOADER: FOUND 1512714_1.jpg
然而,有时图像无法检索到,即使它存在于之前的列表中:
&&& FROM DOWNLOADER: FAILED 1511378_1.jpg
没有图像
removeImage
或removeImages
方法被触发。我无法理解这种行为,即它们可以存在于图像缓存数组中,但偶尔无法检索到。