简短的问题是:我们可以强制tableView:cellForRowAtIndexPath要求"非显示的单元格"(例如,单元格8到25),这样我们就可以从服务器预取图像,如果表格只有20或25行,则永远不会重复使用单元格?
细节:我认为机制tableView:cellForRowAtIndexPath主要是为了保存内存,特别是在iPhone或iPod Touch上,这样如果一个表有1000行,就不会有1000个UITableViewCell对象(UITableViewCell是子类UIView),这将使用很多内存,但只有10个左右的对象,这些对象可以"重用",因此内存使用可以保持很小的尺寸.
但是如果每一行都有一个在服务器上获取的图像怎么办?我们不是使用单独的线程构建单独的图像缓存,而是可以tableView:cellForRowAtIndexPath获取前7个图像并显示表格,稍后,强制单元格8到25进行渲染,并且永远不会调用dequeueReusableCellWithIdentifier(所以我们有25个这样的UITableViewCell对象和不要重复使用它们).如何做到这一点,它实际上是一个实用而简单的解决方案吗?
缓存图像几乎不属于视图层; 也没有从服务器检索这些图像.
您应该采用您在帖子中描述的方法 - 从表中单独缓存图像,然后从该图像缓存中检索这些图像.
您可以构建一个ImageProvider基于其键为您提供图像的类,并使用该提供程序构建表单元格.反过来,ImageProvider决定是从服务器加载图像还是从缓存加载图像,从表视图中隐藏细节.
这种方法为您提供了很大的灵活性:如果您决定通过在设备上本地缓存图像来节省网络流量,那么使用单独缓存的方法可以在不干扰视图层的情况下实现这一点.它还允许您通过将缓存的图像刷新到临时文件来节省内存,例如,在收到低内存警告时.
| 归档时间: |
|
| 查看次数: |
1135 次 |
| 最近记录: |