我有一个由Json填充的tableView。返回的其中一个字段具有需要下载的图像的完整URL。我这样做,一切正常,但有时当我向下滚动你看到TableView行中的错误图像然后它在2秒后改变回来,这发生在我看到大约12或13个图像然后它开始变慢。我想纠正这个问题。我到目前为止的代码是这样的。
stream_image_string :它包含图片网址的完整路径
var Stream_Cache = NSCache():缓存图片
以下代码位于TableView中 - >的UITableViewCell
一切都按照它应该的方式运作,只是想知道我是否能获得更好的表现。
// if more than 0 then it has a URL
if stream_image_string[indexPath.row].characters.count > 0 {
if let image = Stream_Cache.object(forKey: stream_image_string[indexPath.row] as AnyObject) as? UIImage {
cell.stream_image.image = image
} else {
if cell.stream_image != nil {
let strCellImageURL = self.stream_image_string[indexPath.row]
let imgURL: NSURL = NSURL(string: strCellImageURL)!
let request:NSURLRequest = NSURLRequest(url: imgURL as URL)
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)
cell.Stream_Image_Height.constant = 400
let task = session.dataTask(with: request as URLRequest, completionHandler: {(data, response, error) in
DispatchQueue.main.async(execute: { () -> Void in
if data != nil {
cell.stream_image.image = UIImage(data: data!)
} else {
cell.Stream_Image_Height.constant = 0
}
})
});
task.resume()
}
}
} else {
cell.Stream_Image_Height.constant = 0
}
答案 0 :(得分:1)
您可以将图像设置为占位符(而不是nil)并使用预取(请参阅WWDC' 16会话219)以开始提取您的图像:
protocol UITableViewDataSourcePrefetching {
func tableView(_ tableView: UITableView, prefetchRowsAt indexPaths: [NSIndexPath])
optional func tableView(_ tableView: UITableView, cancelPrefetchingForRowsAt indexPaths:
[NSIndexPath])
}
答案 1 :(得分:0)
图像下载可能很好,你需要做的是实现:
override func prepareForReuse() {
stream_image.image = nil
}
在你的牢房里面