【发布时间】:2014-12-07 13:53:33
【问题描述】:
我想为我的UITableView 构建一个图像下载器,以便可以将图像异步加载到表格视图中。
使用NSURLSession 自动使用NSURLCache 来缓存HTTP 请求,我是否能够仅依赖它作为我的缓存机制?我注意到很多人使用NSCache 来保存下载的图像,但是如果NSURLSession 已经实现了缓存,那有必要吗?如果有的话,是不是很糟糕,因为我正在内存中复制图像的副本?
此外,如果可能的话,我如何将它与UITableView 结合使用?单元重用在分配后台传输的结果时提出了一个有趣的问题。
我不能简单地使用NSURLSessionDownloadTask 下载图像并在完成块中设置单元格的图像,因为在下载时单元格可能已被重用,从而导致将其设置为错误的单元格。
let downloadTask = session.downloadTaskWithURL(URL, completionHandler: { location, response, error in
var dataFetchingError: NSError? = nil
let downloadedImage = UIImage(data: NSData.dataWithContentsOfURL(location, options: nil, error: &dataFetchingError))
dispatch_async(dispatch_get_main_queue()) {
// Might end up on the wrong cell
cell.thumbnail.image = downloadedImage
}
})
那么我如何确保分配的图像能够到达正确的单元格,并且我正在正确缓存这些下载?
我知道 SDWebImage 之类的,但我想尝试在不使用库的情况下解决这个问题。
【问题讨论】:
标签: ios cocoa-touch uitableview ios7 nsurlsession