检查设置的图像是不是与缓存中的图像相同
Posted
技术标签:
【中文标题】检查设置的图像是不是与缓存中的图像相同【英文标题】:Check if set image is the same as image in cache检查设置的图像是否与缓存中的图像相同 【发布时间】:2017-04-18 13:35:05 【问题描述】:我正在寻找一种廉价的方法来了解我的 UITableViewCell 中设置的图像是否与我尝试从缓存中设置的图像相同。
由于我有可重复使用的单元格,我需要能够在重复使用单元格时更改图像。
问题是,第一个单元格的图像设置了两次,它会引起我想避免的眨眼。
我必须检查“imageView.image”和从缓存中检索到的图像是否相等,但它不起作用。
有什么线索吗?
【问题讨论】:
你想做什么? 防止我的图片相同时重新加载 你使用模型类了吗? 我用的是 realmswift 【参考方案1】:您似乎正在尝试寻找解决闪烁问题的方法,或许可以尝试调试为什么会发生这种情况。
理想情况下,您应该使用prepareForReuse
并在每次重复使用单元格时清除图像。此外,如果图像被缓存,它应该只设置一次,并且立即设置(而不是像第一个实例那样在缓存中丢失并且您必须执行网络调用)。
如果真的要检查图片是否相同,可以对比图片的URL,URL
和String
都是Equatable
,可以用来唯一标识图片。
【讨论】:
这与设置 isSet 布尔值相同。无法检查已设置的图像的 url,因为我在主要属性上有一个 DidSet,我用它来正确设置所有内容。使用 prepareForReuse 和/或清除图像不起作用,我尝试的第一件事。发生这种情况是因为 ios 每次调用 viewWillAppear 时都会在 indexPath 调用 cellForRow,看不到我该如何调试 一个 isSet 布尔值似乎并不完全相同,布尔值只会告诉图像是否设置,而不是与哪个图像。如果URL
是您的viewModel
对象的一部分,您可以将其与之前用于设置单元格的viewModel
进行比较,从而避免使用相同的图像再次设置它。
另外,我刚刚尝试了一个示例主从项目,当弹出详细视图控制器时,主视图控制器调用了viewWillAppear
,但这不会触发对cellForRowAt indexPath
的调用,所以你的代码中必须有其他东西触发它。
试图通过比较id来使用模型中的数据,id相同,数据没有重置但单元格被重新加载,这有点儿。似乎罪魁祸首在其他地方,我将不得不进一步调查。不过感谢您的宝贵时间以上是关于检查设置的图像是不是与缓存中的图像相同的主要内容,如果未能解决你的问题,请参考以下文章
检查 UIImageView 中的图像不是占位符图像并附加到 UIImage 数组