TableView中的IOS映像可以提高性能

时间:2017-05-02 15:52:26

标签: ios swift uitableview swift3

我有一个由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
    }

2 个答案:

答案 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
}

在你的牢房里面