【发布时间】:2021-07-02 02:17:42
【问题描述】:
我正在尝试缓存图像来自服务的 UIImage(我正在使用 Alamofire)。服务向我发送一个 base64 字符串,我将 base64 转换为数据,然后在 tableviewcell 中打印
cell.imageview.image = UIImage(data: imageDatas[indexPath.row])
我搜索了很多库,如 Kingfisher 、 AlamofireImage ,但它们正在缓存 URL 图像,但无论如何都找不到使用 base64 字符串缓存图像。所以我找到了一个类似的例子并试试这个:
private let cache = NSCache<NSNumber, UIImage>()
private let utilityQueue = DispatchQueue.global(qos: .utility)
private func loadImage(data : Data , completion: @escaping (UIImage?) -> ()) {
utilityQueue.async {
let image = imageDataDecodingClass.imageDataDecoding(imageData: data)
DispatchQueue.main.async {
completion(image)
}
}
}
在单元格中:
let itemNumber = indexPath.section * 2 + 1
let imageData = (showcaseDatas[indexPath.section * 2 + 1].Document?.Document!)!
if let cachedImage = self.cache.object(forKey: NSNumber(value: itemNumber)) {
cell.showcaseImage.image = cachedImage
} else {
cell.addSubview(progressHUDimage)
self.loadImage(data: imageData, completion: {ret in
cell.showcaseImage.image = ret
self.cache.setObject(cell.showcaseImage.image!, forKey: NSNumber(value: itemNumber))
progressHUDimage.removeFromSuperview()
})
}
它的缓存图像完美,但是当我滚动 tableview 时,CPU 增加了很多 (%70-90),这就是为什么 tableview 不平滑。
所以,我的问题是,如何在不增加 CPU 的情况下在 tableviewcell 中缓存 base64 字符串图像?谢谢
【问题讨论】:
-
特别是我正在缓存数据,但问题仍然存在@Larme
-
如果你不想自己做,试试 AlamofireImage
标签: ios swift uitableview caching