美文网首页
iOS UIWebView缓存机制

iOS UIWebView缓存机制

作者: kiushuo | 来源:发表于2017-02-15 14:38 被阅读1303次

WebViewCachelicy

打开Demo分析中的代码:

override func viewDidLoad() {
        super.viewDidLoad()
        if needClearCache {
            URLCache.shared.removeAllCachedResponses()
        }
        let ip = "172.19.20.210"
        let urlStr = "http://\(ip)/test.txt"
        if let url = URL(string: urlStr) {
            let urlRequest = URLRequest(url: url, cachePolicy: .reloadRevalidatingCacheData, timeoutInterval: 60.0)
            webView.loadRequest(urlRequest)
        }
    }

通过上面的代码可以看出,urlRequest的生成中包含了缓存策略参数和超时时间参数,其中的缓存策略参数就决定了WebView的缓存策略。

下面看一下这个枚举类型的缓存策略参数对应的所有常量值以及含义:

extension NSURLRequest {

    public enum CachePolicy : UInt {

        case useProtocolCachePolicy

        case reloadIgnoringLocalCacheData

        case reloadIgnoringLocalAndRemoteCacheData // Unimplemented

        public static var reloadIgnoringCacheData: NSURLRequest.CachePolicy { get }

        case returnCacheDataElseLoad

        case returnCacheDataDontLoad

        case reloadRevalidatingCacheData // Unimplemented
    }
    
}

枚举NSURLRequest.CachePolicy定义了一些常量,这些常量用来确定请求下来的数据与已有的缓存数据之间的交互(取舍)。

  • 常量CachePolicy.useProtocolCachePolicy:url请求加载的默认策略,指定的缓存逻辑位于协议的实现中,用于请求particular(特定的)URL。
  • 常量CachePolicy.reloadIgnoringLocalCacheData:指定从原始数据源获取数据,无论其新鲜度或有效性都不存在本地缓存数据,用于satisfy(满足)URL加载请求。
  • 常量CachePolicy.reloadIgnoringLocalAndRemoteCacheData:指定 不仅忽略本地的缓存数据,还忽略代理和其他中间媒介。Unimplemented(未实现的)。
  • 常量CachePolicy.reloadIgnoringCacheData:是CachePolicy.reloadIgnoringLocalCacheData的旧名,即被CachePolicy.reloadIgnoringLocalCacheData提换了。
  • 常量CachePolicy.returnCacheDataElseLoad:指定使用现有的缓存数据来满足URL的加载请求,无论其存在的时间或者过期。如果对应的URL没有缓存数据的话就从数据源获取。
  • 常量CachePolicy.returnCacheDataDontLoad:指定使用现有的缓存数据来满足URL的加载请求,无论其存在的时间或者过期。如果对应的URL没有缓存数据的话也不从数据源加载该URL,这个请求被设置为失败的。这种情况多用于离线模式。
  • 常量CachePolicy.reloadRevalidatingCacheData:指定已经存在的缓存数据先去数据源验证其有效性,如果无效的话,将从数据源获取。Unimplemented(未实现的)。

想要Demo运行起来还需要如下准备:

  1. 开启Apache服务器;
  2. 新建一个test.txt文件,里面随便写一段内容;
  3. 将test.txt文件copy一份到Apache服务器的文件路径/Library/WebServer/Documents下;
  4. 将代码中的ip地址改为本机的当前ip;
  5. 通过替换Apache服务器文件路径下的text.txt文件来修改其里面的内容。

开启本地Apache服务


sudo apachectl start    // 开启apache
sudo apachectl restart // 重启apache
sudo apachectl stop     // 关闭apache

// Mac下apache服务器的文件路径
/Library/WebServer/Documents

// 传说中httpd.conf的文件路径,暂时用不到
/private/etc/apache2

在同一局域网下,可以使用内网ip地址来访问其他电脑开启的服务。

相关文章

  • iOS UIWebView缓存机制

    WebViewCachelicy 打开Demo分析中的代码: 通过上面的代码可以看出,urlRequest的生成中...

  • UIWebView网页缓存数据参考-iOS

    iOS中,关于UIWebView网页数据本地缓存原理和实际使用 UIWebview使用缓存并且保证实时性(iOS ...

  • UIWebview使用缓存并且保证实时性

    UIWebview使用缓存并且保证实时性 标签(空格分隔): iOS 缓存 UIWebview 实时更新 webv...

  • iOS webview 清除缓存

    使用iOS的UIWebview会自动进行缓存,我们在开发的时候要记得清除Cookie和缓存。 _webView =...

  • WKWebView如何清除缓存

    WKWebView如何清除缓存 iOS7.0只有UIWebView, 而iOS8.0是有WKWebView, 但8...

  • iOS离屏渲染

    iOS 屏幕渲染 iOS 屏幕渲染是双缓存机制, 有一个当前屏幕缓存, 另一个非当前屏幕缓存, 也就是离屏缓存。 ...

  • iOS UIWebView清除缓存

    iOS UIWebView清除缓存,解决H5页面不能刷新数据 最近在做一个项目,用户在个人中心修改了个人信息之后,...

  • iOS清除UIWebView缓存

    使用iOS的webview会自动进行缓存,在开发的时候要记得清除Cookie和缓存。

  • runtime系列文章总结

    《iOS Runtime详解(消息机制,类元对象,缓存机制,消息转发)》《消息转发机制与Aspects源码解析》《...

  • iOS webView利用NSURLProtocol实现离线缓存

    前言 最近公司有一个需求,要对webView(UIWebView)实现缓存机制。即在无网条件下,打开webView...

网友评论

      本文标题:iOS UIWebView缓存机制

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