缓存tableView Cell数据

Posted

技术标签:

【中文标题】缓存tableView Cell数据【英文标题】:Cache tableView Cell data 【发布时间】:2016-04-15 12:18:26 【问题描述】:

在我的应用程序中,我正在使用 URL 下载一些图像并将它们放在 cell.imageView[indexPath.row] 中(这是一个自定义单元格,里面有一个 imageView)。 我一次可以看到两个单元格,我注意到该方法

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> CustomCell 

每次显示单元格时都会调用它。所以我的应用继续从服务器下载图像,应用结果很慢。

我想知道是否可以缓存我已经看到的单元格的数据,所以如果我在 tableView 中向上滚动,我不需要重新下载图像!说代码我想调用上面写的func,只有当我向下滚动表格而不是我已经看到的单元格时。

【问题讨论】:

【参考方案1】:

你可以,但是这需要相当多的工作,所以SDWebImage 的好人创建了一个库来下载/缓存/获取/管理您的图像 URL,只需将您的图像获取代码与此类别交换为UIImageview,这个提供UIImageView.sd_ 方法。

同样使用单元格实现prepareForReuse() 并使用sd_cancel 取消提取

【讨论】:

【参考方案2】:

不要重新发明***! 看看 NSCache,它就像一个可变字典,但它是线程安全的。

NSCache 对象在以下几个方面不同于其他可变集合:

NSCache 类包含各种自动删除策略,其中 确保它不会使用过多的系统内存。这 如果内存需要,系统会自动执行这些策略 其他应用。调用时,这些策略会删除一些项目 从缓存中提取,最大限度地减少其内存占用。

您可以从不同的缓存中添加、删除和查询项目 线程,而不必自己锁定缓存。

与 NSMutableDictionary 对象不同,缓存不会复制键 放入其中的对象。

这些特性对于 NSCache 类是必需的,因为缓存可能 决定在幕后异步自动变异自己 如果调用它来释放内存。

您可以使用图像的 URL 和它们作为值来键入图像。Documentation。 NSHipster 发帖。

【讨论】:

以上是关于缓存tableView Cell数据的主要内容,如果未能解决你的问题,请参考以下文章

UITableView优化

tableviewCell实用小技术

Tableview单元格内UItextView的奇怪行为

UITableViewCell (Reusable Cell) 没有识别正确的约束

TableView性能优化

补充:tableView优化总结