我正在处理的应用,它有许多表格视图,每个单元格都有一个图像。问题是每个图像都是使用网络请求和不同的线程完成的,因此应用程序最终使用许多线程来异步下载所有图像(在cellForRowAtIndex方法中),这会导致巨大的电池消耗。
有没有办法可以只使用一个线程下载它们,也许是一个接一个?有没有更好的方法来处理这个问题?
翠鸟框架怎么样?
答案 0 :(得分:3)
您可以将网络操作块分配到NSOperationQueue
并为maxConcurrentOperationCount
设置较低的值。
答案 1 :(得分:0)
是的,实际上有一种方法,使用翠鸟 这是我的示例代码:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
switch indexPath.section {
case 0:
let cell = tableView.dequeueReusableCell(withIdentifier: "BannerCell", for: indexPath) as! BannerCell
cell.loading.stopAnimating()
let urlString = banners[indexPath.row].image ?? ""
let url = URL(string: urlString)
cell.bannerPic.kf.indicatorType = .activity
cell.bannerPic.kf.setImage(with: url, completionHandler: {
(image, error, cacheType, imageUrl) in
DispatchQueue.main.async {
if let image = image{
if !(self.loaded[indexPath] ?? false){
let aspectRatio = image.size.height/image.size.width
let imageHeight = self.view.frame.width*aspectRatio
tableView.beginUpdates()
self.rowHeights[indexPath.row] = imageHeight
tableView.endUpdates()
self.loaded[indexPath] = true
}
}
}
})
cell.selectionStyle = .none
return cell
}