我正在使用 SDWebImage 库来异步下载和缓存图像以及来自 Web 服务的图像。以下是我用来下载图片的方法:
- (void) downloadThumbnails:(NSURL *)finalUrl
{
SDWebImageManager *manager = [SDWebImageManager sharedManager];
[manager downloadWithURL:finalUrl
options:0
progress:nil
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished)
{
if (image)
{
[self setThumbnail:image];
}
}];
}
它正在成功地从网络服务下载图像并将它们显示在表格 View 中。但是,它不会在应用程序运行之间保留图像。为了缓存图像,我还需要做些什么吗??
更新:请勿建议使用以下内容:
[cell.imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
因为,我的程序结构不同。其次,如果您阅读 SDWebImage 库的描述 HERE ,你会知道它可以像我使用 SDWebImageManager 一样使用它。
最佳答案
我怀疑 SDWebImage 中的缓存机制在这种特定情况下无法正常工作的原因是因为它基于图像 URL。
因此,如果您只是下载 image
并将其分配给对象的某些属性(就像您正在将其分配给 thumbnail
),如果您稍后访问它属性 if 将简单地绕过缓存机制。
为了保持程序的结构,您可以做的是:
将
thumbnailURL
存储在您的self
对象中;第一次下载图片时,调用
SDWebImageManager
downloadWithURL:
方法;这也会将图像存储在缓存中; (你已经按照上面的代码做了)将
thumbnail
设为只读属性,访问缓存以检索与thumbnailURL
关联的图像。
这是您应该做的最少更改。
这可能是第 3 点中描述的只读属性的实现:
- (UIImage*)thumbnail {
return [[SDImageCache sharedCache] imageFromDiskCacheForKey:self.thumbnailURL];
}
其中 self.thumbnailURL
是您保存图像 URL 的对象中的另一个属性。
希望这对您有所帮助。
关于ios - SDWebImage UITableView 单元格图像不持久化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17083629/