成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

iOS開發(fā)系列--數(shù)據(jù)緩存那些小技巧

YacaToy / 806人閱讀

摘要:開發(fā)中,經(jīng)常需要對(duì)數(shù)據(jù)作緩存處理,以便于在手機(jī)網(wǎng)絡(luò)不佳時(shí),能作一個(gè)離線預(yù)加載,提高用戶體驗(yàn)。直到有一天,終于發(fā)現(xiàn)了一個(gè)方便簡(jiǎn)捷的方式去對(duì)數(shù)據(jù)作緩存處理。歸檔是一個(gè)數(shù)據(jù)持久化的過程,該過程用某種格式來保存一個(gè)或多個(gè)對(duì)象,以便以后還原這些對(duì)象。

APP開發(fā)中,經(jīng)常需要對(duì)數(shù)據(jù)作緩存處理,以便于在手機(jī)網(wǎng)絡(luò)不佳時(shí),能作一個(gè)離線預(yù)加載,提高用戶體驗(yàn)。
最早遇到這類需求的時(shí)候,我使用的是Sqlite。需要?jiǎng)?chuàng)建數(shù)據(jù)庫,對(duì)數(shù)據(jù)作大量的處理,過程非常繁瑣。而且在使用Sqlite時(shí),還經(jīng)常操作不當(dāng),造成數(shù)據(jù)鎖死,進(jìn)而導(dǎo)致無法正常對(duì)數(shù)據(jù)進(jìn)行讀寫操作。
由于當(dāng)時(shí)自己經(jīng)驗(yàn)不足,沒有其它更好的辦法,一直在這個(gè)坑里跳不出去。直到有一天,終于發(fā)現(xiàn)了一個(gè)方便簡(jiǎn)捷的方式去對(duì)數(shù)據(jù)作緩存處理。這就是今天所介紹的方法:使用NSKeyedArchiver作數(shù)據(jù)持久化。

歸檔是一個(gè)數(shù)據(jù)持久化的過程,該過程用某種格式來保存一個(gè)或多個(gè)對(duì)象,以便以后還原這些對(duì)象。
直接上代碼吧
首頁是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

接下來看下實(shí)際的使用情況:
通過接口得到的Json數(shù)據(jù)直接傳入進(jìn)來,用banners這個(gè)唯一Key來做本地?cái)?shù)據(jù)持久化緩存:

保存到本地后的樣子是這樣的:

然后再是通過banners這個(gè)唯一Key來讀取緩存:


愿所有人不會(huì)再掉入我曾踩過的那些坑!
希望這篇文章能給你帶來一點(diǎn)幫助!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/61953.html

相關(guān)文章

  • 我的大前端- 收藏集 - 掘金

    摘要:下面圍繞的這樣的目的,即左右知乎網(wǎng)頁上屏幕截圖功能的實(shí)現(xiàn)前端掘金背景最近注意到知乎的屏幕截圖反饋功能,感覺非常不錯(cuò)。正如你期望的,文中的闖關(guān)記之垃圾回收和內(nèi)存管理前端掘金題圖來源,授權(quán)基于協(xié)議。 微信小程序?qū)崙?zhàn)學(xué)習(xí) 起手式 DEMO 仿肯德基 - 前端 - 掘金小程序?大場(chǎng)景? 微信小程序本質(zhì)上來說就是一個(gè) HTML 5(移動(dòng)網(wǎng)頁) 應(yīng)用,用view、scoll-view代替了div標(biāo)...

    LdhAndroid 評(píng)論0 收藏0
  • 「碼個(gè)蛋」2017年200篇精選干貨集合

    摘要:讓你收獲滿滿碼個(gè)蛋從年月日推送第篇文章一年過去了已累積推文近篇文章,本文為年度精選,共計(jì)篇,按照類別整理便于讀者主題閱讀。本篇文章是今年的最后一篇技術(shù)文章,為了讓大家在家也能好好學(xué)習(xí),特此花了幾個(gè)小時(shí)整理了這些文章。 showImg(https://segmentfault.com/img/remote/1460000013241596); 讓你收獲滿滿! 碼個(gè)蛋從2017年02月20...

    wangtdgoodluck 評(píng)論0 收藏0
  • 前端資源系列(4)-前端學(xué)習(xí)資源分享&前端面試資源匯總

    摘要:特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 本以為自己收藏的站點(diǎn)多,可以很快搞定,沒想到一入?yún)R總深似海。還有很多不足&遺漏的地方,歡迎補(bǔ)充。有錯(cuò)誤的地方,還請(qǐng)斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應(yīng)和斧正,會(huì)及時(shí)更新,平時(shí)業(yè)務(wù)工作時(shí)也會(huì)不定期更...

    princekin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<