ios - SDWebImage UITableView 单元格图像不持久化

标签 ios objective-c uiimageview uiimage sdwebimage

我正在使用 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 将简单地绕过缓存机制。

为了保持程序的结构,您可以做的是:

  1. thumbnailURL 存储在您的 self 对象中;

  2. 第一次下载图片时,调用SDWebImageManagerdownloadWithURL:方法;这也会将图像存储在缓存中; (你已经按照上面的代码做了)

  3. thumbnail 设为只读属性,访问缓存以检索与 thumbnailURL 关联的图像。

这是您应该做的最少更改。

这可能是第 3 点中描述的只读属性的实现:

- (UIImage*)thumbnail {

    return [[SDImageCache sharedCache] imageFromDiskCacheForKey:self.thumbnailURL];
}

其中 self.thumbnailURL 是您保存图像 URL 的对象中的另一个属性。

希望这对您有所帮助。

关于ios - SDWebImage UITableView 单元格图像不持久化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17083629/

相关文章:

ios - 发送字符串到特定号码

iphone - 尝试在数字键盘上实现完成/取消按钮,但在模拟器中选择文本字段时会出现错误

iphone - 当 UINavigationBar 隐藏/显示时如何防止 View 调整大小/转换

objective-c - MPMoviePlayerController 在四秒后停止

ios - 使用cocoapods将Xcode默认调试方案更改为其他方案

iphone - UILabel 中的可点击文本

objective-c - 从 NSMutableArray 释放 CGMutablePathRef

iOS AudioServicesPlayAlertSound 耳机静音

ios - 旋转 UIImage 或 UIImageView 自定义度数

ipad - AFNetworking 内存分配不断上升