猿问

在UITableViewCell中延迟加载图像

我的UITableView中有大约50个自定义单元格。我想在从URL获取图像的单元格中显示图像和标签。

我想延迟加载图像,以便在加载图像时UI不会冻结。我尝试在单独的线程中获取图像,但是每次单元格再次可见时,我都必须加载每个图像(否则单元格的重用会显示旧图像)

诸如Facebook之类的应用程序仅针对当前可见的单元格加载图像,并且一旦加载图像,便不会再次加载它们。有人可以告诉我如何重复这种行为。

谢谢。

编辑
当用户快速滚动时,尝试在NSMutableDictionary对象中缓存图像会产生问题。我仅在完全停止滚动并清除内存缓存警告时才获取图像。但是该应用程序始终会收到内存警告(由于要缓存的图像大小),并在重新加载之前清除缓存。如果滚动非常快,则会崩溃。

欢迎其他任何建议


九州编程
浏览 597回答 3
微课
3回答

慕工程0101907

将图像加载到后台线程上仍然是一个好主意。如果您不想每次都重新加载它们,建议您设置一个NSMutableDictionary并将图像存储在其中。您可以使用一些唯一的标识符(例如行ID甚至是图像的名称)作为每个图像的键。加载单元格时,您将向NSMutableDictionary发送objectForKey:消息以检索该特定单元格的图像(基于其唯一键)。如果返回nil,则表示缓存中缺少该图像,您需要背景图像加载线程才能对其进行检索。否则,您将获取适当的图像以供表格单元格显示。出现内存警告时,您可以清除此图像缓存,而不会产生不利影响(除了强制按需重新加载图像外)。
随时随地看视频慕课网APP
我要回答