【iOS】UIWebView自动缓存导致页面不可刷新问题

使用webview加载页面的时候,最理想的情况是: 资源文件没有更新,就只加载缓存文件。如果有更新,则第一时间使用新的文件。

UIWebview中提供的缓存策略

NSURLRequestUseProtocolCachePolicy 缓存策略定义在 web 协议实现中,用于请求特定的URL。是默认的URL缓存策略。
NSURLRequestReloadIgnoringLocalCacheData 从服务端获取数据,忽略本地缓存
NSURLRequestReloadIgnoringLocalAndRemoteCacheData //源文件注释中写到没有实现
NSURLRequestReloadIgnoringCacheData 被NSURLRequestReloadIgnoringLocalCacheData替换了
NSURLRequestReturnCacheDataElseLoad 已经存在的缓存数据用于请求返回,不管它的过期日期和已经存在了多久。如果没有请求对应的缓存数据,从数据源读取
NSURLRequestReturnCacheDataDontLoad 已经存在的缓存数据用于请求返回,不管它的过期日期和已经存在了多久。如果没有请求对应的缓存数据,不要去数据源读取,该请求被设置为失败,这种情况多用于离线模式
NSURLRequestReloadRevalidatingCacheData //源文件中写到没有实现

其中NSURLRequestUseProtocolCachePolicy的缓存策略如下所示:



存在的问题

不管使用哪种缓存策略,在使用过程中可能都会出现以下问题:

1.访问a页面;
2.跳转到b页面;
3.在b页面操作一些东西后;
4.回到a页面,此时a页面应当有变化;

但是实际过程中,第4步a页面并没有变化,和第1步访问结果显示一样,在app重新启动后,再次访问a页面时,发现才会有变化。
这是因为iOS中NSURLCache缓存引起的,NSURLCache缓存会根据url进行自动缓存,如果两次访问a页面的url相同,时间间隔比较短的时候就会出现以上问题。在app关闭后NSURLCache缓存也会被删除,所以再次打开app后a页面正确显示。


如何解决

在UIWebView页面切换成功后调用删除cache方法。

 //清除webView的缓存
[[NSURLCache sharedURLCache] removeAllCachedResponses];

推荐阅读更多精彩内容

  • Netweaver里使用事务码SM59创建Destination: Java 新建一个destination: 测...
    JerryWang_汪子熙阅读 180评论 0 1
  • 【找不到驱力,任何组织和个人的存在都将是昙花一现!】 我们在匆忙赶路的时候,忽略了自身的驱力系统,往往会筋疲力尽而...
    荣来书院阅读 222评论 0 3
  • 我们来看看rebase这个命令,有可能这是我们使用最多的命令哦。rebase和merge命令都可以合并branch...
    转角遇见一直熊阅读 2,750评论 1 29
  • 文/棋扇聆风 玉龙出塞大漠寒,落花流转满庭伤。 秋风知草挽长恨,奈何孤魂尸已僵。 三尺江湖夺剑鞘,一杯乾坤醉书生。...
    棋扇聆风阅读 286评论 31 15