我已经实现了自定义NSCache来存储我UITableViewCells
中显示的远程下载的图像。请注意,图像是异步下载的。
但是,如果我快速向上和向下滚动,即使图像来自本地,我仍然可以看到图像被刷新。任何人都可以帮我理解如何避免令人耳目一新的问题?
答案 0 :(得分:1)
重复使用tableView单元格是一个很好的做法,因此您需要更新cellForRowAtIndexPath
处的图像,否则图像将会混乱。
但我可以建议一些优化:
提高缓存性能,使图像加载速度更快,
将图像添加到单元格imageView时使用标准或自定义标记,cellForRowAtIndexPath
将单元格的图像标记值与单元格索引/行号的组合进行比较(如* 1000 +行)使用此公式作为哈希指标。这应该让你知道你是否真的需要更新显示的图像,并可能会节省一些缓存读取操作,
如果加载的图片很大并且您使用调整大小的版本在单元格上显示,则单独存储缩略图 - 这将为您节省调整大小的操作,这可能非常昂贵,
确保您正在重新加载缓存中已有的图像(如果它们已过时),同样重要的是不要太频繁地执行检查,因为大量的HTTP请求会使应用程序看起来很慢因为更快地消耗电池(更不用说状态栏上的烦人活动指示器,因为我希望尽可能少地看到用户)。
希望它有所帮助。
在您拥有大量单元格的情况下,大多数单元格将被重用,而不是创建。
如果要为任何单元格添加addSubview
的按钮,则重复使用的单元格已添加,标签文本,图像也将重复使用。
在这种情况下,您可能需要检查是否需要将新图像设置为现有按钮。其中一种简单的方法是将单元格的部分和行号存储在图像标记(或单元格标记或按钮标记,无论如何)中,该公式用于在单个属性中存储两个数字。 它会告诉您要重复使用的单元格的部分/行号。
它并不总是有效,你可以根据你的需要找到更好的解决方案。
答案 1 :(得分:0)
在TableView委托中的cellForRowAtIndexPath方法中,您需要检查图像是否在缓存中,如果不是,则需要下载它。如果存在,则需要将单元格的图像设置为缓存中的版本。我假设你没有从缓存中提取图像而是重新下载它。