NSURLCache快取的位置

2021-07-27 18:20:31 字數 3147 閱讀 6099

前言

對於nsurlrequest,我們都很熟悉。在建立request時,可以設定屬性cachepolicy,決定從本地還是網路上獲取內容。那麼如果是從本地取的話,是從哪取呢?下面來簡單聊一下。

nsurlcahe

nsurlcahe實現了response的快取機制,將nsurlrequest和nscachedurlresponse對映起來。預設情況下,memory cache=4m,disk cache=20m。可以子類化nsurlcahe實現自己的快取邏輯。

如果response的httpheader裡cache-control/expires設定為可以被快取,ios會自動的將其存到本地資料庫中。路徑是沙盒路徑下library/caches/bundid/cache.db。,對於webview的快取,也一樣,因為它也是用的nsurlcache。

nscachedurlresponse是包含了nsurlresponse和快取data的類。當資料返回時,將要快取時會調這個方法。如果返回nil,則不快取。原理如下。

- (nullable

nscachedurlresponse *)connection:(nsurlconnection *)connection willcacheresponse:(nscachedurlresponse *)cachedresponse

}return cachedresponse;

}

cache.db

可以用mesasqlite開啟cache.db,其中包括4張表,我們主要關注3個。

也可以直接在命令列中sqlite3 dbpath,開啟資料庫。

檢視表

sqlite> .tables

entry_id是主鍵,request_object請求物件,response_object響應物件,都是blob型別。在measesqlite中檢視時,資料不能完全顯示出來。不知道有什麼方法可以直接檢視blob。

執行了一條sql,看到response_object的內容如下:

sqlite> select response_object from cfurl_cache_blob_data;

bplist00?wversionuarray?

"#? __cfurlstringtype\_cfurlstring_j

只是可以大致知道包括了url,但其他的資訊暫時不太清楚,如有知道的朋友,還請告知。

receiver_data儲存一些返回的資料,如image,js,html,json等。可以自行檢視。

request_key:請求url

storage_policy:快取策略

4.快取的查詢

最後用response_object和receiver_data拼裝nscachedurlresponse。

storagepolicy表明了object是否允許儲存。

typedef

ns_enum(nsuinteger, nsurlcachestoragepolicy)

;

刪除快取

執行完這句後,表中的資料全部清空了。

[[nsurlcache sharedurlcache] removeallcachedresponses];
後語

本文簡單的說明了下快取的位置,及表結構。若各路大蝦有更加深入的理解,歡迎提出。

遺留問題:

1. 如何方便檢視blob資料

2. response_object到底是神馬?

2017.1.6更新--解決遺留問題

1、如何方便檢視blob資料

無意中看到一篇博文,也說到對blob資料的檢視,作者發現blob中匯出的txt資料,都有相似的地方,以***開頭,然後去google解法。剎那間我也想起,我所疑惑的問題,是不是可以有相同的處理。

於是乎,喵了眼txt,全都是以plist00開頭。搜了一下,發現原來是plist的二進位制檔案。並且有方法可以直接轉成plist。這刻,

chrome更改快取位置

1.chrome預設快取位置 2.刪除該cache資料夾 如不能刪除,關閉chrome瀏覽器進行刪除 如果還不能刪除的話,使用360強制刪除 3.建立乙個用於存放快取的資料夾 如 本人會將所有的快取都存放的乙個總快取cache目錄下,d cache googlechrome 4.win r 執行cm...

chrome更改快取位置

1.chrome預設快取位置 2.刪除該cache資料夾 如不能刪除,關閉chrome瀏覽器進行刪除 如果還不能刪除的話,使用360強制刪除 3.建立乙個用於存放快取的資料夾 如 本人會將所有的快取都存放的乙個總快取cache目錄下,d cache googlechrome 4.win r 執行cm...

如何修改火狐的快取位置

現在的記憶體是越來越便宜了,2g或者4g記憶體的電腦早就已經是主流配置了,如果你的電腦只有1g記憶體,你都不好意思拿出來跟人打招呼,呵呵。那怎麼才能把全部的記憶體都有效的利用起來呢?一 般如果你的電腦安裝的是win7系統的話,系統占用記憶體基本在1g左右,如果是安裝的xp或者linux系統的話,系統...