2013-05-03 65 views
0

我實際上有多個關於這個的問題...我還是一個新的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:被調用。

請幫忙嗎?

回答

0

如果您運行一個HTTP代理(如CharlesFiddler),您可以選擇通過線路實際發送的網絡流量(較少)。

您還可以檢查請求/響應頭以查看響應是否確實指向緩存。

請注意,在某些情況下,您可能會看到一個conditional-GET(返回304),意味着客戶端要求其緩存中包含的內容,但只希望在服務器具有更新版本時下載內容。

+0

這並不能真正回答我的問題... – 2013-05-08 01:03:23

+0

@iOS_newbie - 爲什麼不呢?我的意思是,如果代理不顯示任何出站請求,您將知道webview是否從緩存中加載。 – TomSwift 2013-05-08 15:48:28