【问题标题】:Can't disable UIWebView caching无法禁用 UIWebView 缓存
【发布时间】:2016-03-07 16:53:32
【问题描述】:

我正在使用UIWebView 发出一系列请求,我需要保持UIWebView 的缓存清晰,以便我可以从头开始每个新请求。因此,在执行每个请求之前,我会执行以下操作:

[[NSURLCache sharedURLCache] removeAllCachedResponses];
[[NSURLCache sharedURLCache] setDiskCapacity:0];
[[NSURLCache sharedURLCache] setMemoryCapacity:0];

但不幸的是,它没有帮助。每次第一个请求大约需要 4 秒,而每个后续请求大约需要 1.5 秒,因此显然加载的数据被缓存在某个地方。

我还尝试为请求显式设置缓存策略,如下所示:

NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:URL];
request.cachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
[self.webView loadRequest:request];

但这也无济于事。第一个请求比以下请求花费的时间要长得多。就像根本没有为请求设置缓存策略一样。

有什么想法吗,伙计们?

【问题讨论】:

    标签: ios objective-c caching uiwebview nsurlrequest


    【解决方案1】:

    试试这个代码:

    NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
        for (NSHTTPCookie *each in cookieStorage.cookies)
        {
            [cookieStorage deleteCookie:each];
        }
    

    【讨论】:

    • 不幸的是它没有帮助
    【解决方案2】:

    尝试使用NSURLCacheStorageNotAllowed。这指定了NSURLCache 中的存储不允许以任何方式存储在内存中或磁盘上。

    ↳Foundation Framework Reference > NSCachedURLResponse Class Reference

    【讨论】:

    • 感谢您的回答,但我不知道如何使用此常量。 NSCachedURLResponse 类实例是由 iOS 在某个地方创建的,根本没有我。我应该以某种方式拦截缓存响应对象的创建吗?您能否提供更多信息?
    • 在您的请求中,您可以像这样使用它:NSURLRequest *request = [NSURLRequest requestWithURL:URL cachePolicy:NSURLCacheStorageNotAllowed timeoutInterval:10.0];
    • 不幸的是它没有帮助。好像你错了。 NSURLCacheStorageNotAllowed 是 NSURLCacheStoragePolicy 类型,指定使用 NSCachedURLResponse 类,而 NSURLRequest 的 cachePolicy 是 NSURLRequestCachePolicy
    • 也许我不明白你想做什么;您是在尝试清除请求 url 响应缓存,还是完全不同?如果是这样,那么您已经完成的应该就足够了。您可以尝试的另一件事是removeCachedResponseForRequest,尽管removeAllCachedResponses 应该可以工作。
    • 我希望 UIWebView 根本不使用它的缓存。我希望它始终从远程服务器执行数据加载,而不是从某个本地存储中获取数据
    猜你喜欢
    • 2013-07-24
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    相关资源
    最近更新 更多