【发布时间】:2018-01-01 19:09:00
【问题描述】:
我有一个我认为很容易解决的非常常见的情况 - 一个带有 UICollectionView 的应用程序,每个单元格中都有一个图像,该图像是通过 http/https 从 Web 服务器上的 API 获取的。
我正在尝试实现 iOS 10 的 prefetching in UICollectionView,以便提前请求可能需要的图像。
在我看来,最佳预取应该满足各种要求:
- 即使图像已经在等待获取的队列中,也应始终优先于推测性预取来获取实际立即需要的图像。
- 当 iOS 告诉我们不再需要预取某个特定图像时,应该将它(并且只有它)从预取队列中移除。
- 如果请求图像,则应始终传送该图像,除非取消 /all/ 请求(如果在多个单元格或多个视图控制器中使用一个图像很容易出错)。
- 如果调用了 didEndDisplaying,则应中止优先提取(但是,如果请求了预取但未取消,则图像应该以较低的优先级留在队列中)。
- 仅与图像加载相关的各种常见要求 - 例如。不要用预取请求淹没底层系统,这最终会占用带宽和服务器插槽,远离立即需要的图像。
我查看了各种现有的库,例如 SDWebImage 和 Kingfisher,很惊讶这两个库似乎都无法轻松满足上述要求。
例如,SDWebImage 不满足第二个要求 - 您只能 cancel all prefetching,或者您必须为每个图像创建一个预取器(这意味着各种其他 SDWebImage 功能,例如限制 pre 的并发请求数) - 获取的图像 - 即要求 5 - 不再有效。)
这真的是一个难题吗?我错过了一些明显的解决方案吗?我是不是想太多要求了?
【问题讨论】:
标签: ios uitableview uiimageview uicollectionview prefetch