0

我的表格视图通过 SDWebImage(UIImageView 的异步图像下载/缓存类别)在每个tableView:cellForIndexPath:.

                                               // '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"- 现在与我的第二个单元格相同。

我很好奇什么样的单元格重用/缓存魔法导致单元格拍摄前一个单元格的照片。

保留单元格属性并仅在需要时设置它们的最佳方法是什么?

4

1 回答 1

0

问题很可能出在您使用的图像包上。如果您重复 URL 请求来抓取图像,最好的做法可能是实现 NSURLCache,这是一个相当简单的方法,并且可以完美地处理缓存,所以这不是问题。 这是关于如何使用它的 NSHipster 指南。 其他解决方案倾向于解决这些问题。由于它是 UIImageView 上的一个类别,因此在单元格中使用时,它可能会导致 UIImageView 的实现出现问题。

于 2013-08-31T02:16:55.700 回答