2017-09-12 31 views
0

因此,我在工作中讨论了在UITableView的单元格中下载图像的更好方法。在UITableView的单元格中下载图像的最佳做法? iOS/Swift

这两个选项是: 在cellForRowAtIndex中,我异步下载图像,导致使用多个线程和多个网络请求,我们怀疑这可能是电池消耗的问题。

另一种选择是使用一个线程和一个网络请求一次下载所有图像,循环访问所有图像的URL在粗体cellForRowAtIndex之外的数组,然后调用表视图重载功能。

对于后一种方法,我们可以在每个图像下载完成后立即设置每个图像(可能通过调用重载功能)。

所以我很想知道,处理这个问题的行业标准方法是什么?特别是在性能方面有什么优点和缺点?有没有更好的方法?

+0

,我建议你使用证明的第三方库的一个,像'SDWebImage'或'Alamofire'的'KingFisher'或任何其他你想要的 –

+1

为什么下载图像异步耗尽电池不仅仅是下载相同数量的图像,而是同步? –

+0

我被告知,这一说法来自Google和业内其他领先公司的基准测试。我认为这与唤醒网络芯片和一遍又一遍有什么关系? – Tarek

回答

1

我通常使用SDWebImage,它缓存图像,并可以在以后重新使用。它提供了扩展和各种方法的灵活性。

检查我实现的代码:只使用一个线程会导致缓慢的下载过程

import UIKit 
import SDWebImage 

extension AcceptedWinksViewController: UITableViewDataSource { 
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: Constants.CellIdentifier.WinkListTableViewCell) as! WinkListTableViewCell 
     let profile = self.winkList[indexPath.row] //Model 
     let placeHolderImage = UIImage(named:"placeHolder") //your placeholder image, can be class or global variable 
     if let url = profile.imageURL { 
      cell.userImageView.sd_setImage(with: url, placeholderImage: placeHolderImage, options: .refreshCached, completed: nil) //check its various options 
     } 
     else { 
      cell.userImageView.image = placeHolderImage 
     } 
     return cell 
    } 
} 
+0

是的,这对缓存图像很有用,但是如何处理第一次下载?它是否异步处理它? – Tarek

+0

是的,它可以异步处理,根据图像URL创建图像下载队列,请参考其sdk代码以获得更好的理解 –

相关问题