iOS中的內存緩存和磁盤緩存

? ? ? 在項目中我們難免會用到一些緩存方式來保存服務器傳過來的數(shù)據(jù),以減少服務器的壓力笨忌。 緩存的方式分為兩種分別為內存緩存和磁盤緩存,內存緩存速度快容量小,磁盤緩存(沙盒)容量大速度慢可持久化凰浮。

現(xiàn)將參考的文章列出來 ?內存緩存和磁盤緩存??SDWebImage緩存策略

????緩存分為內存緩存和磁盤緩存兩種,其中內存是指當前程序的運行空間苇本,緩存速度快容量小袜茧,是臨時存儲文件用的,供CPU直接讀取瓣窄,比如說打開一個程序,他是在內存中存儲,關閉程序后內存就又回到原來的空閑空間笛厦;磁盤是程序的存儲空間,緩存容量大速度慢可持久化與內存不同的是磁盤是永久存儲東西的俺夕,只要里面存放東西,不管運行不運行 裳凸,他都占用空間!磁盤緩存是存在Library/Caches劝贸。

一 ?內存緩存

iOS內存分為5個區(qū):棧區(qū)登舞,堆區(qū),全局區(qū)悬荣,常量區(qū)菠秒,代碼區(qū)

棧區(qū)stack:這一塊區(qū)域系統(tǒng)會自己管理,我們不用干預,主要存一些局部變量践叠,以及函數(shù)跳轉時的現(xiàn)場保護言缤。因此大量的局部變量,深遞歸,函數(shù)循環(huán)調用都可能導致內存耗盡而運行崩潰禁灼。

堆區(qū)heap:與棧區(qū)相對管挟,這一塊一般由我們自己管理,比如alloc弄捕,free的操作僻孝,存儲一些自己創(chuàng)建的對象。

全局區(qū)(靜態(tài)區(qū)static):全局變量和靜態(tài)變量都存儲在這里守谓,已經(jīng)初始化的和沒有初始化的會分開存儲在相鄰的區(qū)域穿铆,程序結束后系統(tǒng)會釋放

常量區(qū):存儲常量字符串和const常量

代碼區(qū):存儲代碼

代碼區(qū)為低地址->棧區(qū)為高地址?

二 磁盤緩存

? ? iOS應用程序只能在該程序創(chuàng)建的文件系統(tǒng)中讀取文件,不可以去其它地方訪問斋荞,此區(qū)域被成為沙盒荞雏,所以所有的非代碼文件都要保存在此,例如圖像平酿,圖標凤优,聲音,映像蜈彼,屬性列表筑辨,文本文件等

默認情況下,每個沙盒含有3個文件夾:Documents, Library?和?tmp幸逆。

?Documents:蘋果建議將程序中建立的或在程序中瀏覽到的文件數(shù)據(jù)保存在該目錄下棍辕,iTunes備份和恢復的時候會包括此目錄

? ? ? ? Library:存儲程序的默認設置或其它狀態(tài)信息;

? ? ? ? Library/Caches:存放緩存文件秉颗,iTunes不會備份此目錄痢毒,此目錄下文件不會在應用退出刪除.

? ? ? ? Library/preferences: 存放的是?user default 存儲的信息,iTunes會備份此目錄蚕甥,?應用程序重新啟動不會丟棄數(shù)據(jù)哪替,我們使用 NSUserDefaults寫的設置數(shù)據(jù)都會保存到該目錄下的一個plist文件中,這就是所謂的寫到plist中菇怀!

? ? ? ? tmp:提供一個即時創(chuàng)建臨時文件的地方凭舶,?iTunes不會備份此目錄

????用戶生成的文件放在documents,自己的文件放在library/cache里面爱沟,簡單的說明:如果你做個記事本的app帅霜,那么用戶寫了東西,總要把東西存起來呼伸。那么這個文件則是用戶自行生成的身冀,就放在documents文件夾里面钝尸。如果你有一個app,需要和服務器配合搂根,經(jīng)常從服務器下載東西珍促,展示給用戶看。那么這些下載下來的東西就放在library/cache剩愧。apple對這個很嚴格猪叙,放錯了就會被拒。主要原因是ios的icloud的同步問題仁卷。

三 應用

????SDWebImage使用NSCache類來實現(xiàn)內存緩存穴翩。

? ? 在加載圖片的時候,SDWebImage調用SDImageCache先讀取內存緩存锦积,如果內存緩存沒有芒帕,就會使用GCD開啟異步線程去讀取磁盤緩存,如果找到磁盤緩存充包,則同步到內存緩存中去副签,使用GCD在主線程中設置圖片遥椿,如果都沒有基矮,下載后會緩存到內存和磁盤上(可選)。

? ??SDWebImage 默認會有一個對上次加載失敗的圖片拒絕再次加載的機制冠场。 也就是說家浇,一張圖片在本次會話加載失敗了,如果再次加載就會直接拒絕碴裙。(額外知識)

????SDWebImage 會在每次 APP 結束的時候執(zhí)行清理任務钢悲。 清理緩存的規(guī)則分兩步進行。 第一步先清除掉過期的緩存文件舔株。 如果清除掉過期的緩存之后莺琳,空間還不夠。 那么就繼續(xù)按文件時間從早到晚排序载慈,先清除最早的緩存文件惭等,直到剩余空間達到要求。具體點办铡,SDWebImage 是怎么控制哪些緩存過期辞做,以及剩余空間多少才夠呢?maxCacheAge是文件緩存的時長,maxCacheAge 的默認值寡具,注釋上寫的很清楚秤茅,緩存一周,SDWebImage 在默認情況下不會對緩存空間maxCacheSize設限制。分別在應用進入后臺和結束的時候童叠,遍歷所有的緩存文件框喳,如果緩存文件超過 maxCacheAge 中指定的時長,就會被刪除掉。(額外知識)

[SDImageCache sharedImageCache].maxCacheSize =?1024?*?1024?*?50;// 50M

maxCacheSize 是以字節(jié)來表示的五垮,我們上面的計算代表 50M 的最大緩存空間撰豺。 把這行代碼寫在你的 APP 啟動的時候,這樣 SDWebImage 在清理緩存的時候拼余,就會清理多余的緩存文件了恕刘。(額外知識)

常見的內存緩存有NSCache、TMMemoryCache象迎、PINMemoryCache揽趾、YYMemoryCache。常見的磁盤緩框架存有TMDiskCache亭姥、PINDiskCache稼钩、YYCache。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末达罗,一起剝皮案震驚了整個濱河市坝撑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌粮揉,老刑警劉巖巡李,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異扶认,居然都是意外死亡侨拦,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門辐宾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狱从,“玉大人,你說我怎么就攤上這事叠纹〖狙校” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵誉察,是天一觀的道長与涡。 經(jīng)常有香客問我,道長冒窍,這世上最難降的妖魔是什么递沪? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮综液,結果婚禮上款慨,老公的妹妹穿的比我還像新娘。我一直安慰自己谬莹,他們只是感情好檩奠,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布桩了。 她就那樣靜靜地躺著,像睡著了一般埠戳。 火紅的嫁衣襯著肌膚如雪井誉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天整胃,我揣著相機與錄音颗圣,去河邊找鬼。 笑死屁使,一個胖子當著我的面吹牛在岂,可吹牛的內容都是我干的。 我是一名探鬼主播蛮寂,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼蔽午,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了酬蹋?” 一聲冷哼從身側響起及老,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎范抓,沒想到半個月后骄恶,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡尉咕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年叠蝇,在試婚紗的時候發(fā)現(xiàn)自己被綠了璃岳。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片年缎。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖铃慷,靈堂內的尸體忽然破棺而出单芜,到底是詐尸還是另有隱情,我是刑警寧澤犁柜,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布洲鸠,位于F島的核電站,受9級特大地震影響馋缅,放射性物質發(fā)生泄漏扒腕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一萤悴、第九天 我趴在偏房一處隱蔽的房頂上張望瘾腰。 院中可真熱鬧,春花似錦覆履、人聲如沸蹋盆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽栖雾。三九已至楞抡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間析藕,已是汗流浹背召廷。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留账胧,地道東北人柱恤。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像找爱,于是被迫代替她去往敵國和親梗顺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內容