Search code examples
iosswiftuitableviewdispatch-asyncimageurl

Swift 3 : URL Image makes UITableView scroll slow issue


I have an extension to print image URL on UIImageView. But I think the problem is my tableView is so slow because of this extension. I think I need to open thread for it. How can I create a thread in this extension or do you know another solution to solve this problem?

My code :

extension UIImageView{

    func setImageFromURl(stringImageUrl url: String){

        if let url = NSURL(string: url) {
            if let data = NSData(contentsOf: url as URL) {
                self.image = UIImage(data: data as Data)
            }
        }
    }
}

Solution

  • I think, that problem here, that you need to cache your images in table view to have smooth scrolling. Every time your program calls cellForRowAt indexPath it downloads images again. It takes time.

    For caching images you can use libraries like SDWebImage, Kingfisher etc.

    Example of Kingfisher usage:

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "identifier", for: indexPath) as! CustomCell
    
        cell.yourImageView.kf.setImage(with: URL) 
        // next time, when you will use image with this URL, it will be taken from cache.
    
        //... other code
    }
    

    Hope it helps