說(shuō)到緩存,最常用的是圖片緩存SDWebImage,今天就對(duì)比下SDImageCache,EGOCache,YYCache
SDImageCache
包含內(nèi)存緩存和硬盤緩存, 內(nèi)存緩存用的是NSCache,硬盤緩存用的是NSFileManager將數(shù)據(jù)NSData的形式存到目錄當(dāng)中,SDImageCache值得學(xué)習(xí)的是清理緩存的策略
在初使化的時(shí)候設(shè)置緩存保存時(shí)間,創(chuàng)建NSCache,_ioQueue隊(duì)列<用于負(fù)責(zé)對(duì)硬盤的讀寫>,添加觀察者,在收到內(nèi)存警告啡直、關(guān)閉或進(jìn)入后臺(tái)時(shí)完成對(duì)應(yīng)的處理;
清除緩存, 內(nèi)存緩存在監(jiān)聽到內(nèi)存報(bào)警告后NSCache去清理,硬盤緩存在App退到后臺(tái)時(shí)檢查緩存是否過(guò)期,若過(guò)期即清理緩存, 重點(diǎn)是如何檢測(cè)出緩存是否過(guò)期
一般情況下如果查找緩存的文件路徑會(huì)用NSString來(lái)描述,對(duì)于 OS X 10.7 和 iOS 5以后, NSURL 更便于使用烁涌,而且更有效率,它還能緩存文件系統(tǒng)的屬性酒觅。NSURL 有八個(gè)方法來(lái)訪問(wèn)被稱為 resource values 的東西撮执。這些方法提供了一個(gè)穩(wěn)定的接口,使我們可以用來(lái)獲取和設(shè)置文件與目錄的各種屬性阐滩,例如文件大小<NSURLFileSizeKey>,文件修改時(shí)間<NSURLContentModificationDateKey>, 尤其是在遍歷目錄內(nèi)容時(shí),使用``` -[NSFileManager enumeratorAtURL:includingPropertiesForKeys:options:errorHandler:]二打,```并傳入一個(gè)關(guān)鍵詞(keys)列表县忌, 檢索它們掂榔,顯著的提升性能.參考
NSFileManager 文件用NSURL檢索可以查出上次文件修改時(shí)間,用這個(gè)時(shí)間與當(dāng)前時(shí)間對(duì)比症杏,一般人不知道的技能 很贊 !
EGOCache
本質(zhì)上是把所有要緩存的對(duì)象轉(zhuǎn)化成NSData, 然后用NSFileManager 緩存文件, 在初使化的時(shí)候創(chuàng)建在三個(gè)操作隊(duì)列,一個(gè)用來(lái)讀寫硬盤,兩個(gè)用來(lái)讀寫plist文件装获,說(shuō)到plist文件必須說(shuō)下它的思路,作者為了全球檢查緩存是否過(guò)期將 緩存的文件 的 的key 全部存到plist文件中,設(shè)置key存入的時(shí)間<即文件的加入緩存的時(shí)間>,這樣就可以直接用plist文件中key-value的形式檢索出過(guò)期的文件
YYCache
本質(zhì)上是用sqlite3, NSFileManager 緩存文件, 清理緩存的策略基本上與EGOCache 類似, 不過(guò)好像比較復(fù)雜穴豫,應(yīng)深入看下