如何检查UIWebView是否从NSURLCache加载?

问题描述:

我实际上有多个关于这个的问题...我还是一个新的NSURLCache和UIWebViews,但不知怎的,我想到了基础知识。如何检查UIWebView是否从NSURLCache加载?

无论如何,我能够成功地为我的UIWebView实现缓存(我认为)。我初始化了NSURLCache。我的UIWebView使用loadRequest:方法加载它的内容。我分配了拥有UIWebView的ViewController,因为它是委托。我也有ViewController实现NSURLConnectionDataDelegate。我实现了连接:willCacheResponse:方法只是在控制台中记录一条消息,以便我可以检查缓存是否完成。我还记录了当前的磁盘和内存使用情况。它在缓存后增加,所以我可以看到它确实有效。

但是,当我再次加载页面时,我认为请求被再次发送到服务器,因为像connection:didReceiveResponse:和connection:willCacheResponse这样的连接委托方法被调用。

我也想尝试使用cachedResponseForRequest:从缓存中获取cachedResponse。我在webViewDidFinishLoad中调用了这个方法:但它总是返回null。缓存真的有用吗?

如何判断WebView是否从缓存中加载?我滥用cachedResponseForRequest:?另一方面,缓存中至少应存在适当的Control-Cache头部值?我正在谷歌的主页URL上进行测试,并返回其缓存控制头的私有值,但是我可以看到缓存起作用,因为连接:willCacheResponse:被调用。

请帮忙吗?

如果您运行一个HTTP代理(如CharlesFiddler),您可以选择通过线路实际发送的网络流量(较少)。

您还可以检查请求/响应头以查看响应是否确实指向缓存。

请注意,在某些情况下,您可能会看到一个conditional-GET(返回304),意味着客户端要求其缓存中包含的内容,但只希望在服务器具有更新版本时下载内容。

+0

这并不能真正回答我的问题... – 2013-05-08 01:03:23

+0

@iOS_newbie - 为什么不呢?我的意思是,如果代理不显示任何出站请求,您将知道webview是否从缓存中加载。 – TomSwift 2013-05-08 15:48:28