来源: http://blog.csdn.net/jiadabin/article/details/52129789

来源: http://blog.csdn.net/jiadabin/article/details/52129789

来源: http://blog.csdn.net/jiadabin/article/details/52129789

1、 问题

使用SDWebImage设置头像,头像上传到服务器,pc端可以更新头像后,客户端需要刷新几次才能更新!!!

设置SDWebImageRefreshCached标识,甚至SDWebImage的官网也这么说!

2、分析

 SDWebImageManager内部利用SDWebImageDownloader来下载,它的缓存策略有两种,一种是用NSURL缓存,一种是自己定义了SDImageCache(内部使用NSCache)进行缓存。????
 如果设置了SDWebImageRefreshCached标示位,那么SDWebImageDownloader则利用NSURL进行缓存,而且使用的policy为NSURLRequestUseProtocolCachePolicy。
 
 那么如果设置了SDWebImageRefreshCached标识位,图片是否更新则要取决于你服务器的cache-control设置了,如果没有cache-control的话,客户端则然享受不了自动更新的功能。
 所以说仅仅设置SDWebImageRefreshCached往往是不能解决问题的。。。。
 
 那么如何查看服务器是否支持cache-control呢?
 其实简单,只需要要终端输入 curl [url] --head,即可。

 curl http://www.devdiv.com/uc_server/data/avatar/000/00/00/01_avatar_big.jpg --head

返回结果如下图:

3、解决方案分析:

 那么如何让SDWebImage支持自动更新呢?
 实现方法有几种:
 1. 让服务器更新url,也就是说服务器端如果更新了头像,那么就生成新的url
 2. 让服务器端支持cache-control,由于小弟对服务器端开发知识有限,个人觉得这个策略可能无法满足客户端的需求,还请各位大神斧正
 3. 修改SDWebImage,让它支持http的Last-Modified或者etag(前提是服务器端也要支持)

SDWebImageRefreshCached的更多相关文章

  1. iOS代码规范(OC和Swift)

    下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...

  2. 【原】SDWebImage源码阅读(四)

    [原]SDWebImage源码阅读(四) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 SDWebImage中主要实现了NSURLConnectionDataDelega ...

  3. 【原】SDWebImage源码阅读(三)

    [原]SDWebImage源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1.SDWebImageDownloader中的downloadImageWithURL 我们 ...

  4. 【原】SDWebImage源码阅读(二)

    [原]SDWebImage源码阅读(二) 本文转载请注明出处 —— polobymulberry-博客园 1. 解决上一篇遗留的坑 上一篇中对sd_setImageWithURL函数简单分析了一下,还 ...

  5. IOS 网络-深入浅出(一 )-> 三方SDWebImage

    首要我们以最为常用的UIImageView为例介绍实现原理: 1)UIImageView+WebCache:  setImageWithURL:placeholderImage:options: 先显 ...

  6. SDWebImage的简单使用

    首先,SDWebImage的git地址是:https://github.com/rs/SDWebImage.我们可以直接到这里进行下载,然后添加到自己的项目中去. 一.使用场景(前提是已经导入了SDW ...

  7. 通读SDWebImage①--总体梳理、下载和缓存

    本文目录 下载操作SDWebImageDownloaderOptions和下载过程实现 下载管理SDWebImageDownloader 缓存SDImageCache SDWebImageManage ...

  8. SDWebImage使用及原理

    第一步,下载SDWebImage,导入工程.github托管地址https://github.com/rs/SDWebImage 第二步,在需要的地方导入头文件 1 #import "UII ...

  9. SDWebImage下载图片有时候无法成功显示出来

    之前用下面的方法现在图片,有时候会出现图片没有下载成功显示: - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)p ...

随机推荐

  1. c/c++ 求一个整数转换为二进制数时中‘1’的个数

    求一个正整数转换为二进制数时中‘1’的个数 分析:这道题目就是很简单的位运算,我们可以把这个整数和1进行&操作(就是二进制数中的最低位与1进行&),然后将这个整数进行右移处理,将下个位 ...

  2. matlab中特殊符号如希腊字符

    使用legend 'Best' 图标标识放在图框内不与图冲突的最佳位置'BestOutside' 图标标识放在图框外使用最小空间的最佳位置 legend('sin','cos','location', ...

  3. 使用min-device-pixel-ratio媒体功能实现真正的1像素border

    关于设备像素比的知识,想必做过移动端开发的都有接触,这里就不介绍啦,万一有不懂的可以看张鑫旭大神的设备像素比devicePixelRatio简单介绍 由于设备像素比存在的原因,我们在处理设计图的一些边 ...

  4. Byte数组和字符串相互转换的问题

    第一:需求:将文件转成byte数组,之后转成字符串返回.过滤器接收到响应内容后,需要将响应的内容转成byte数组. 第二:我刚开始的做法: Controller:byteArr = Conversio ...

  5. socket端口绑定后通过bat干掉

    @echo off::port为需要去绑定端口set port=8888for /f "tokens=5 delims= " %%a in ('netstat -ano ^|fin ...

  6. 解题报告 『[USACO08NOV]Mixed Up Cows(状压动规)』

    原题地址 观察数据范围:4 ≤ N ≤ 16. 很明显,这是一道状压DP. 定义:dp[i][j]表示队尾为奶牛i,当前含奶牛的状态为j,共有多少组符合条件的队伍. 代码实现如下: #include ...

  7. 【[AHOI2005]洗牌 题解

    一道好题. 首先是数据范围. 0<N≤10^10 ,0 ≤M≤10^10,且N为偶数 这是这道题的坑点,也是痛点. 10^10表示这这道题必有规律. 那么,first step,我们先探索规律. ...

  8. [工作积累] D3D10+ 中 Pixel Shader 的input semantic和参数顺序

    由于semantic的使用,我们有理由相信 vertex shader的output 和 pixel shader的input是按照semantic来匹配的,而跟传入顺序无关.印象dx9时代是这样. ...

  9. 音频格式软件 GoldWave 支持V3

    版本:GoldWave v5.67 md5:36E78BE278908B6538CE24D41A6859BA sha1:36A00003562F071670588D29E573B2FB0D8FF40A ...

  10. MQTT研究之EMQ:【wireshark抓包分析】

    基于上篇博文[SSL双向验证]的环境基础,进行消息的具体梳理. 环境基础信息: . 单台Linux CentOS7.2系统,安装一个EMQTTD的实例broker. . emq的版本2.3.11. . ...