【发布时间】:2017-09-12 08:36:24
【问题描述】:
所以我在工作中讨论了在 UITableView 的单元格中下载图像更好的方法。
这两个选项是: 在 cellForRowAtIndex 中,我异步下载了图像,这导致使用多个线程和多个网络请求,我们怀疑这可能是电池消耗的问题。
另一种选择是使用一个线程和一个网络请求一次下载所有图像,方法是遍历一个包含所有图像 URL 的数组,该数组位于粗略的 cellForRowAtIndex 之外,然后调用表格视图重新加载函数。
对后一种方法也有一点修改,我们可以在每张图片下载后立即设置每张图片(可能通过调用 reload 函数)。
所以我很想知道,处理此问题的行业标准方法是什么?特别是在性能方面有什么优点和缺点?有没有更好的办法?
【问题讨论】:
-
只使用一个线程会导致下载过程缓慢,我建议您使用经过验证的第三方库之一,如
SDWebImage或KingFisher或Alamofire或任何其他您想要的 -
为什么异步下载图片比同步下载相同数量的图片更耗电?
-
有人告诉我,这一说法来自谷歌和业内其他领先公司所做的基准测试。我认为这与一遍又一遍地唤醒网络芯片有关?
-
多线程下载不应该使用额外的电池(至少不会显着更多);不缓存图像,以便您在 tableview 滚动时重复下载相同的图像。要么使用
NSCache实现缓存,要么使用建议的第 3 方库之一,看看是否有帮助。 -
正如@ReinierMelian 所说,使用SDWebImage 或Alamofire 下载tableviewcells 的图像。使用缓存来减少网络负载。还假设 tableviewcells 很小,请使用缩略图(较小)而不是全尺寸图像。
标签: ios swift uitableview concurrency uiimageview