【发布时间】:2012-10-28 12:49:47
【问题描述】:
我喜欢这个类似的question,但它太旧了。
我正在使用 SDWebImage 库从远程服务器下载图像。
远程图像可能会更改(但保持相同的名称),因此我必须在使用缓存的图像之前检查远程图像是否已更改。
我该怎么做?
提前致谢 (抱歉英语不好)
【问题讨论】:
标签: iphone objective-c ios caching sdwebimage
我喜欢这个类似的question,但它太旧了。
我正在使用 SDWebImage 库从远程服务器下载图像。
远程图像可能会更改(但保持相同的名称),因此我必须在使用缓存的图像之前检查远程图像是否已更改。
我该怎么做?
提前致谢 (抱歉英语不好)
【问题讨论】:
标签: iphone objective-c ios caching sdwebimage
我今晚只是在做这项非常研究,并且基于 SDWebImage 的当前实现,看起来没有“内置”方式使用条件 GET(etag 或日期)类型请求到服务器进行检查更新。
我现在正在探索的方法是创建一个唯一的 URL,以便在图像的服务器版本更新时,将哈希或版本附加到末尾。比如:
http://example.com/myimage.png?v=2
并随着图像的变化增加版本号,但保持 myimage.png 名称相同,因为它不会改变。这应该会强制 SDWebImage 下载新图像并为新版本的图像构建新缓存。
否则,您必须调整 SDImageCache.m 中的常量值 cacheMaxCacheAge 以比默认值 1 周更频繁地检查。
【讨论】:
我是这样做的:
[SDWebImage sd_setImageWithURL:[NSURL URLWithString:strURL] placeholderImage:[UIImage imageNamed:@"placeholder.png"] options:SDWebImageRefreshCached];
/** * 即使图像被缓存,也要尊重 HTTP 响应缓存控制,并在需要时从远程位置刷新图像。 * 磁盘缓存将由 NSURLCache 而不是 SDWebImage 处理,导致性能略有下降。 * 此选项有助于处理在同一请求 URL 后面更改的图像,例如Facebook 图形 api 个人资料图片。 * 如果缓存的图像被刷新,完成块被缓存的图像调用一次,最终的图像被调用一次。 * * 仅当您无法使用嵌入的缓存破坏参数使您的 URL 成为静态时才使用此标志。 */
【讨论】: