摘要:開發(fā)中,經(jīng)常需要對數(shù)據(jù)作緩存處理,以便于在手機網(wǎng)絡不佳時,能作一個離線預加載,提高用戶體驗。直到有一天,終于發(fā)現(xiàn)了一個方便簡捷的方式去對數(shù)據(jù)作緩存處理。歸檔是一個數(shù)據(jù)持久化的過程,該過程用某種格式來保存一個或多個對象,以便以后還原這些對象。
APP開發(fā)中,經(jīng)常需要對數(shù)據(jù)作緩存處理,以便于在手機網(wǎng)絡不佳時,能作一個離線預加載,提高用戶體驗。
最早遇到這類需求的時候,我使用的是Sqlite。需要創(chuàng)建數(shù)據(jù)庫,對數(shù)據(jù)作大量的處理,過程非常繁瑣。而且在使用Sqlite時,還經(jīng)常操作不當,造成數(shù)據(jù)鎖死,進而導致無法正常對數(shù)據(jù)進行讀寫操作。
由于當時自己經(jīng)驗不足,沒有其它更好的辦法,一直在這個坑里跳不出去。直到有一天,終于發(fā)現(xiàn)了一個方便簡捷的方式去對數(shù)據(jù)作緩存處理。這就是今天所介紹的方法:使用NSKeyedArchiver作數(shù)據(jù)持久化。
歸檔是一個數(shù)據(jù)持久化的過程,該過程用某種格式來保存一個或多個對象,以便以后還原這些對象。
直接上代碼吧
首頁是JsonCacheData.h文件
#import@interface JsonCacheData : NSObject /** * 防止備份到iTunes * * @param URL 本地Path * * @return 是否成功 */ + (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL; /** * 保存數(shù)據(jù)到本地 * * @param data 字典或數(shù)組 * @param key 通過Key保存或讀取 * * @return 是否成功 */ + (BOOL)writePlistWithData:(id)data saveKey:(NSString *)key; /** * 清除數(shù)據(jù) * * @param key 通過Key清除 * * @return 是否成功 */ + (BOOL)clearWithKey:(NSString *)key; /** * 通過Key讀取本地緩存 * * @param key Key * * @return 字典或數(shù)組 */ + (id)readPlistWithKey:(NSString *)key; @end
JsonCacheData.m文件
#import "JsonCacheData.h" //獲取Cache目錄路徑 #define CACHEPATH [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0] @implementation JsonCacheData //防止備份到iTunes和iCloud(上架審核必備) + (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL { if ([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]) { NSError *error = nil; BOOL success = [URL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&error]; if(!success){ NSLog(@"Error excluding %@ from backup %@", [URL lastPathComponent], error); } return success; } return YES; } #pragma mark 緩存數(shù)據(jù) + (BOOL)writePlistWithData:(id)data saveKey:(NSString *)key { BOOL success; NSString *path = [[CACHEPATH stringByAppendingPathComponent:key] stringByAppendingString:@"CacheData.plist"];//獲取路徑 NSFileManager *fileManager = [NSFileManager defaultManager]; //判斷是否存在,不存在則創(chuàng)建路徑 if (![fileManager fileExistsAtPath:path]) { [fileManager createFileAtPath:path contents:nil attributes:nil]; } NSData *cacheData = [NSKeyedArchiver archivedDataWithRootObject:data]; success = [cacheData writeToFile:path atomically:YES]; [self addSkipBackupAttributeToItemAtURL:[NSURL fileURLWithPath:path]]; NSLog(@"Key: %@ , 數(shù)據(jù)緩存 %@", key, success ? @"成功" : @"失敗"); return success; } #pragma mark 清除緩存 + (BOOL)clearWithKey:(NSString *)key { NSString *path = [[CACHEPATH stringByAppendingPathComponent:key] stringByAppendingString:@"CacheData.plist"];//獲取路徑 NSFileManager *fileManager = [NSFileManager defaultManager]; //判斷是否存在 if (![fileManager fileExistsAtPath:path]) { return NO; } else { return [fileManager removeItemAtPath:path error:nil]; } } #pragma mark 讀取緩存 + (id)readPlistWithKey:(NSString *)key { NSString *path = [[CACHEPATH stringByAppendingPathComponent:key] stringByAppendingString:@"CacheData.plist"];//獲取路徑 id object = [NSKeyedUnarchiver unarchiveObjectWithFile:path]; return object; } @end
接下來看下實際的使用情況:
通過接口得到的Json數(shù)據(jù)直接傳入進來,用banners這個唯一Key來做本地數(shù)據(jù)持久化緩存:
保存到本地后的樣子是這樣的:
然后再是通過banners這個唯一Key來讀取緩存:
愿所有人不會再掉入我曾踩過的那些坑!
希望這篇文章能給你帶來一點幫助!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/61953.html
摘要:下面圍繞的這樣的目的,即左右知乎網(wǎng)頁上屏幕截圖功能的實現(xiàn)前端掘金背景最近注意到知乎的屏幕截圖反饋功能,感覺非常不錯。正如你期望的,文中的闖關(guān)記之垃圾回收和內(nèi)存管理前端掘金題圖來源,授權(quán)基于協(xié)議。 微信小程序?qū)崙?zhàn)學習 起手式 DEMO 仿肯德基 - 前端 - 掘金小程序?大場景? 微信小程序本質(zhì)上來說就是一個 HTML 5(移動網(wǎng)頁) 應用,用view、scoll-view代替了div標...
摘要:讓你收獲滿滿碼個蛋從年月日推送第篇文章一年過去了已累積推文近篇文章,本文為年度精選,共計篇,按照類別整理便于讀者主題閱讀。本篇文章是今年的最后一篇技術(shù)文章,為了讓大家在家也能好好學習,特此花了幾個小時整理了這些文章。 showImg(https://segmentfault.com/img/remote/1460000013241596); 讓你收獲滿滿! 碼個蛋從2017年02月20...
摘要:特意對前端學習資源做一個匯總,方便自己學習查閱參考,和好友們共同進步。 特意對前端學習資源做一個匯總,方便自己學習查閱參考,和好友們共同進步。 本以為自己收藏的站點多,可以很快搞定,沒想到一入?yún)R總深似海。還有很多不足&遺漏的地方,歡迎補充。有錯誤的地方,還請斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應和斧正,會及時更新,平時業(yè)務工作時也會不定期更...
閱讀 2879·2021-10-14 09:50
閱讀 1227·2021-10-08 10:21
閱讀 3661·2021-10-08 10:16
閱讀 3067·2021-09-27 14:02
閱讀 3142·2021-09-23 11:21
閱讀 2127·2021-09-07 10:17
閱讀 413·2019-08-30 14:00
閱讀 2117·2019-08-29 17:26