我的表格视图通过每个tableView:cellForIndexPath:
的SDWebImage(UIImageView的异步图像下载/缓存类别)加载图片。
// 'spot' is a dictionary of this cell's attributes
NSURL* imageURL = [NSURL URLWithString:(NSString*)[spot objectForKey:@"Image"]];
UIImage* placeholderImage = [UIImage imageNamed:@"placeholder.png"];
^加载图像,但不断发出请求或从缓存中提取。所以我想看看渲染的单元格是否存储在内存中,所以我只能在需要时才能生成图像请求。我通过添加对图像视图的图像属性的简单检查来解决这个问题。
if (!cell.pictureView.image)
{
NSURL* imageURL = [NSURL URLWithString:(NSString*)[spot objectForKey:@"Image"]];
UIImage* placeholderImage = [UIImage imageNamed:@"placeholder.png"];
[cell.pictureView setImageWithURL:imageURL placeholderImage:placeholderImage options:SDWebImageCacheMemoryOnly];
}
这可以使我的图像在退出并重新进入应用程序后不必重新加载。但是在我的一个单元格中,有一个故意坏的图像URL(用于调试),过去保留为imageNamed:@"placeholder"
的图像现在与我的第二个单元格相同。
我很好奇是什么样的细胞重用/缓存魔法导致细胞拍摄前一个细胞的图片。
保留单元格属性的最佳方法是什么,只在需要时设置它们?
答案 0 :(得分:0)
问题很可能与你正在使用的图像包有关。如果您要重复URL请求来获取图像,最好的做法是实现NSURLCache,这是一个相当简单的并且完美地处理缓存,所以它不是问题。 This is the NSHipster guide on how to use it.其他解决方案倾向于这些问题。由于它是UIImageView上的一个类别,因此当在单元格中使用时,它可能会导致UIImageView实现的任何问题。