開發(fā)中常用緩存工具

開發(fā)中有些界面是永遠不能空著 及時是在沒有網(wǎng)絡(luò)的或者網(wǎng)絡(luò)很弱的情況下都需要有數(shù)據(jù)顯示寿酌,
這就需要給APP做緩存,當(dāng)然緩存有很多種方式,比如 數(shù)據(jù)庫來做低千、比如用緩存文件來做、等等!

記錄一下我自己做緩存的方式

1.如果我用AFNetworking 做數(shù)據(jù)請求和 UIKit+AFNetworking 做圖片異步加載 示血,那么這些異步加載完成后的圖片就會保存一份在沙盒的cache文件加中棋傍。 有了這樣的前提,做文件緩存就方便了很多了难审!

做文件緩存 首先在每次請求到網(wǎng)絡(luò)數(shù)據(jù)(json)之后 直接將這個數(shù)據(jù)(json)保存起來瘫拣。當(dāng)下次讀取數(shù)據(jù)的時候 直接拿到上次保存的數(shù)據(jù)(json),就拿到上次請求的所有信息。然后按照請求的得到數(shù)據(jù)后的邏輯做一遍 告喊,可以將緩存中的內(nèi)容展示在界面上啦麸拄!
(圖片 AFN 會自動緩存在cache文件夾中 AFN 網(wǎng)絡(luò)異步加載圖片的順序 1.在內(nèi)存中查找有沒有緩存,如果有直接拿緩存的數(shù)據(jù)使用不在請求 2.如果沒有找到相應(yīng)的數(shù)據(jù)在從網(wǎng)上請求數(shù)據(jù) 基于這個原理 我就不用緩存圖片了)

/**
 寫入緩存

 @param data 寫入的數(shù)據(jù)
 @param name 寫入的文件名稱

 @return 是否寫入成功
 */
+(BOOL)writeToCacheFile:(id)data fileName:(NSString *)name;
#pragma mark - 向緩存中寫入 數(shù)據(jù)(json)
+(BOOL)writeToCacheFile:(id)data fileName:(NSString *)name{
    if (!data)
        return NO;
    
    NSString *lib_cash = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    
    NSString *cachePath =  [lib_cash stringByAppendingPathComponent:name];
    
    NSData *cashData = [NSKeyedArchiver archivedDataWithRootObject:data];
    
   BOOL flag = [[NSFileManager defaultManager] createFileAtPath:cachePath contents:cashData attributes:nil];
    
   return flag;
}
/**
 讀取緩存中的內(nèi)容

 @param pathName     保存時 的文件名稱
 @param callback 返回是否 讀取成功  如果成功 返回讀取出來的數(shù)據(jù)
 */
+(void)readData_path:(NSString *)pathName callback:(void (^)(BOOL isSuccess,id response))callback;
#pragma mark - 從緩存中讀取數(shù)據(jù)(json)
+(void)readData_path:(NSString *)pathName callback:(void (^)(BOOL isSuccess,id response))callback{
    
    NSString *document = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    
    NSString *cachePath =  [document stringByAppendingPathComponent:pathName];
    
    
    NSData *data = [NSData dataWithContentsOfFile:cachePath];
    
    if (!data) {
        callback(NO,nil);
        return;
    }
    
    id cashData = [NSKeyedUnarchiver unarchiveObjectWithData:data];
    
    if (cashData)
        callback(YES,cashData);
    else
        callback(NO,nil);
}

這樣的緩存方式僅限與 數(shù)據(jù)量小的情況 黔姜!

一些和緩存相關(guān)的方法

/**
  計算沙盒中Cache 文件夾的大小

 @return 計算結(jié)果 eg:53 M
 */
+(NSString *)calculate_Size_Of_Cache_File;
#pragma mark - 計算沙盒中Cache 文件夾的大小
+(NSString *)calculate_Size_Of_Cache_File{
    
    NSString *lib_cache = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
    
    float totalSize = 0;
    
    NSDirectoryEnumerator *fileEnumerator = [[NSFileManager defaultManager] enumeratorAtPath:lib_cache];
    
    for (NSString *fileName in fileEnumerator) {
        
        NSString *filePath = [lib_cache stringByAppendingPathComponent:fileName];
        
        NSDictionary *attrs = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil];
        
        unsigned long long length = [attrs fileSize];
        
        totalSize += length / 1024.0 / 1024.0;
        
    }
    
    return [NSString stringWithFormat:@"%.2f M",totalSize];
}
/**
 清理緩存(刪除cache文件中 的內(nèi)容和所有子文件)
 */
+(void)clean_All_Cache_infos;
#pragma mark - 清理所有的緩存信息
+(void)clean_All_Cache_infos{
    //刪除cache文件夾下所有的子文件
    NSString *cachPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask, YES) firstObject];
    NSArray *files = [[NSFileManager defaultManager] subpathsAtPath:cachPath];
    
    for (NSString *subFile in files) {
        NSError *error;
        NSString *path = [cachPath stringByAppendingPathComponent:subFile];
        if ([[NSFileManager defaultManager] fileExistsAtPath:path]) {
            [[NSFileManager defaultManager] removeItemAtPath:path error:&error];
        }
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拢切,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子秆吵,更是在濱河造成了極大的恐慌淮椰,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帮毁,死亡現(xiàn)場離奇詭異实苞,居然都是意外死亡,警方通過查閱死者的電腦和手機烈疚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門黔牵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人爷肝,你說我怎么就攤上這事猾浦。” “怎么了灯抛?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵金赦,是天一觀的道長。 經(jīng)常有香客問我对嚼,道長夹抗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任纵竖,我火速辦了婚禮漠烧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘靡砌。我一直安慰自己已脓,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布通殃。 她就那樣靜靜地躺著度液,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上堕担,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天已慢,我揣著相機與錄音,去河邊找鬼照宝。 笑死蛇受,一個胖子當(dāng)著我的面吹牛句葵,可吹牛的內(nèi)容都是我干的厕鹃。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼乍丈,長吁一口氣:“原來是場噩夢啊……” “哼剂碴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起轻专,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤忆矛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后请垛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體催训,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年宗收,在試婚紗的時候發(fā)現(xiàn)自己被綠了漫拭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡混稽,死狀恐怖采驻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情匈勋,我是刑警寧澤礼旅,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站洽洁,受9級特大地震影響痘系,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜饿自,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一汰翠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧璃俗,春花似錦奴璃、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春雳旅,著一層夾襖步出監(jiān)牢的瞬間跟磨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工攒盈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留抵拘,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓型豁,卻偏偏與公主長得像僵蛛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子迎变,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容