缓存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数据的主要内容,如果未能解决你的问题,请参考以下文章