美文网首页iOS开发攻城狮的集散地
【iOS】UIWebView自动缓存导致页面不可刷新问题

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

作者: 狍子君 | 来源:发表于2018-07-14 10:32 被阅读10次

    使用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];
    

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/wvvepftx.html