開源框架學(xué)習(xí)-1-EGOCache

項(xiàng)目地址? https://github.com/enormego/EGOCache/


EGOCache是一個(gè)輕量級(jí)的緩存框架。用法簡(jiǎn)單方便,在現(xiàn)在的項(xiàng)目中,我就用到EGOCache來緩存下載過的照片和字符串,還能設(shè)置這些存儲(chǔ)值的有效時(shí)間。


簡(jiǎn)單用法


NSString* saveString=@"xxx";

[[EGOCacheglobalCache]setString:saveStringforKey:@"xxx"withTimeoutInterval:24*60*60];

NSString* xxx=[[EGOCacheglobalCache]stringForKey:@"xxx"];

NSLog(@"xxx=%@",xxx);


學(xué)習(xí)筆記


1. 對(duì)于一些常用的代碼片段可以使用宏定義,減少冗余代碼


#if DEBUG

#define CHECK_FOR_EGOCACHE_PLIST() if([key isEqualToString:@"EGOCache.plist"]) { \

NSLog(@"EGOCache.plist is a reserved key and can not be modified."); \

return; }

#else

#define CHECK_FOR_EGOCACHE_PLIST() if([key isEqualToString:@"EGOCache.plist"]) return;

#endif

2.內(nèi)聯(lián)函數(shù)的使用, 消除函數(shù)調(diào)用時(shí)的時(shí)間開銷 ,同事代碼也比較簡(jiǎn)潔


static ?inline ?NSString* cachePathForKey(NSString* directory,NSString* key) {

key = [keystringByReplacingOccurrencesOfString:@"/"withString:@"_"];

return[directorystringByAppendingPathComponent:key];

}

3.文中大量使用了GCD技術(shù),這里不詳細(xì)介紹GCD,請(qǐng)大家參考一本PDF教程

下載地址 ? ?http://download.csdn.net/detail/dongsh315/7240711?

4.單例模板

+ (instancetype)globalCache {

static id instance;

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

instance = [[[self class] alloc] init];

});a

return instance;

}

5. 在刪除文件時(shí)避免要?jiǎng)h的文件和存儲(chǔ)本地的文件重名


- (void)removeCacheForKey:(NSString*)key {

CHECK_FOR_EGOCACHE_PLIST(); ? //巧妙之處

dispatch_async(_diskQueue, ^{

[[NSFileManager defaultManager] removeItemAtPath:cachePathForKey(_directory, key) error:NULL];

});

[self setCacheTimeoutInterval:0 forKey:key];

}

6.這里是設(shè)置 _frozenCacheInfoQueue? _cacheInfoQueue? 兩個(gè)變量的原因 , 兩個(gè)都是用來保存鍵值對(duì)的字典 ,比較文中的代碼發(fā)現(xiàn),? 代碼很相似 , 區(qū)別是? _cacheInfoQueue 多了 self.frozenCacheInfo= [_cacheInfocopy]; 和 [selfsetNeedsSave];? 從注釋中就可以看出 _frozenCacheInfo 是為了快速讀出新值的需要? 而 _cacheInfocopy是為了保存寫入文件的需要 _cacheInfocopy滯后一些 。


7. 存儲(chǔ)值的有效時(shí)間思路

存儲(chǔ)時(shí)把時(shí)間存下來就好了 下次讀出時(shí)如果時(shí)間比當(dāng)前時(shí)間小說明 失效

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,069評(píng)論 0 9
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,602評(píng)論 19 139
  • 27、ViewController的didReceiveMemoryWarning是在什么時(shí)候調(diào)用的?默認(rèn)的操作是...
    煙雨平生花飛舞閱讀 694評(píng)論 0 1
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,925評(píng)論 0 33
  • 設(shè)計(jì)模式是什么? 你知道哪些設(shè)計(jì)模式,并簡(jiǎn)要敘述?設(shè)計(jì)模式是一種編碼經(jīng)驗(yàn),就是用比較成熟的邏輯去處理某一種類型的事...
    irenb閱讀 5,382評(píng)論 1 21

友情鏈接更多精彩內(nèi)容