前言
對於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系統的話,系統...