所以我在工作中讨论了在UITableView的单元格中下载图像的更好方法。
这两个选项是: 在cellForRowAtIndex中,我异步下载图像,导致使用多个线程和多个网络请求,我们怀疑这可能是电池耗尽的问题。
另一个选择是使用一个线程和一个网络请求一次下载所有图像,方法是循环一个包含所有图像的数组。在cellForRowAtIndex之外的URL粗,然后调用表视图重载函数。
后一种方法也略有修改,我们可以在每次下载图像后立即设置每个图像(可能通过调用重新加载功能)。
所以我很想知道,处理这个问题的行业标准方法是什么?有什么优点和缺点,特别是在性能方面?有没有更好的方法?
答案 0 :(得分:3)
我通常使用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
}
}
答案 1 :(得分:0)
以下是我的最佳做法;
用于电池消耗;
根据Apple的能源效率指南,与逐个下载相比,批量下载项目更好。但是,这里需要进行一些尝试。我认为,与电池消耗相比,性能在这里具有最高的优先级。