前言:
今年重點(diǎn)在于公司iOS架構(gòu)的梳理工作,上周整理了http請(qǐng)求接口管理與解耦,接下來(lái)準(zhǔn)備整理一下項(xiàng)目中的緩存處理,目前項(xiàng)目中使用的是PINCache,去年加入這個(gè)開源框架時(shí)并沒有對(duì)這個(gè)框架進(jìn)行了解,導(dǎo)致現(xiàn)在同步方式異步方式的使用存在一定的混亂情況和錯(cuò)誤使用現(xiàn)象。今天重新站在使用者的角度對(duì)這個(gè)再做一次了解,以避免在后期的使用中出現(xiàn)類似以往的問(wèn)題。
關(guān)于緩存:
無(wú)論是Android還是IOS都會(huì)使用到緩存,緩存的設(shè)計(jì)方案也大致雷同(內(nèi)存緩存+磁盤緩存),內(nèi)存緩存方面Android采用LinkedHashMap,IOS采用NSDictionary,兩者都是基于Key-Value模型進(jìn)行存儲(chǔ),磁盤緩存方面Android采用寫文件,IOS這邊采用歸檔操作本質(zhì)是也是寫文件。
關(guān)于PINCache
PINCache是Pinterest的程序員在Tumblr的TMCache基礎(chǔ)上發(fā)展而來(lái)的,TMCache已經(jīng)不再維護(hù),PINCache主要的改進(jìn)是修復(fù)了dealock的bug,是一個(gè)快速,無(wú)死鎖的并行對(duì)象緩存,支持 iOS 和 OS X 系統(tǒng)。上面已經(jīng)了解到PINCache分兩層緩存(內(nèi)存緩存+磁盤緩存),內(nèi)部實(shí)現(xiàn)主要有兩個(gè)類實(shí)現(xiàn):PINMemoryCache、PINDiskCache,同時(shí)對(duì)兩者提供了同步異步調(diào)用方式,由于磁盤緩存采用的是歸檔操作,所以對(duì)自定義的對(duì)象必須實(shí)現(xiàn)NSCoding協(xié)議,PINCache除了可以按鍵取值、按鍵存值、按鍵刪值之外,還可以移除某個(gè)日期之前的緩存數(shù)據(jù)、刪除所有緩存、限制緩存大小,限制緩存對(duì)象的存活時(shí)間等。接下來(lái)看下具體使用方式。
PINCache使用
同步方式
//模擬數(shù)據(jù) NSString *value=@"who is lcj"; //模擬一個(gè)key NSString *key=@"whoislcj"; //sync 同步方式 //寫入緩存 [[PINCache sharedCache] setObject:value forKey:key]; //判斷緩存是否存在 BOOL containsObject =[[PINCache sharedCache] containsObjectForKey:key]; NSLog(@"containsObject : %@", containsObject?@"YES":@"NO"); &