【发布时间】:2016-07-14 15:20:22
【问题描述】:
我正在尝试快速使用图像缓存,但没有按预期工作。我已经尝试过 NSCache 和 AlamofireImage 但两者都对我不起作用。我没有收到任何代码错误,但是当我尝试从缓存中获取图像时,它总是返回 nil。
我猜图像没有保存在缓存中。有人可以在这里分享一些关于如何在 swift 或 ios 中使用图像缓存的示例链接吗?
【问题讨论】:
我正在尝试快速使用图像缓存,但没有按预期工作。我已经尝试过 NSCache 和 AlamofireImage 但两者都对我不起作用。我没有收到任何代码错误,但是当我尝试从缓存中获取图像时,它总是返回 nil。
我猜图像没有保存在缓存中。有人可以在这里分享一些关于如何在 swift 或 ios 中使用图像缓存的示例链接吗?
【问题讨论】:
您可以做的是在后台线程中下载图像。下载图像后,将其保存为对象并更新您的主线程。为了下次显示图像,您可以直接从缓存中加载图像。
下面我分享我的代码
var imageCache = NSMutableDictionary()
if let img = imageCache.valueForKey("key") as? UIImage{
imageView.image = img
}
else{
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithURL(NSURL(string: imgURL!)!, completionHandler: { (data, response, error) -> Void in
if(error == nil){
let img = UIImage(data: data!)
imageCache.setValue(img, forKey: "key") // Image saved for cache
dispatch_async(dispatch_get_main_queue(), { () -> Void in
//Update your image view
})
}
})
task.resume()
}
希望对你有所帮助
【讨论】:
如果您实现了下载图像机制,您可以将其用作磁盘和内存缓存。可以指定缓存大小、过期时间
https://github.com/huynguyencong/DataCache
或者您可以使用 Kingfisher 作为图像缓存库
【讨论】: