Swift - AlamofireImage - 缓存图像未被一致检索

问题描述 投票:0回答:0

想知道有没有人遇到过类似的问题。所以我使用 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
方法被触发。我无法理解这种行为,即它们可以存在于图像缓存数组中,但偶尔无法检索到。

swift alamofire image-caching alamofireimage
© www.soinside.com 2019 - 2024. All rights reserved.