iOS數(shù)據(jù)存儲(chǔ)的常用方式

iOS數(shù)據(jù)存儲(chǔ)的常用方式

  • 屬性列表(plist)歸檔
  • Preference(偏好設(shè)置)
  • NSKeyedArchiver歸檔(NSCoding)
  • SQLite3
  • Core Data

plist存儲(chǔ)

什么時(shí)候使用plist存儲(chǔ):字典或者數(shù)組
plist不能存儲(chǔ)自定義對(duì)象

- (IBAction)save:(id)sender {
    Person *p = [[Person alloc] init];

    // 假設(shè)存儲(chǔ)數(shù)組胶逢,存儲(chǔ)應(yīng)用沙盒
    // 文件保存到文件夾
    NSArray *users = @[p,@"332"];

    // directory:獲取哪個(gè)文件夾 NSCachesDirectory,搜索caches文件
    // domainMask:獲取哪個(gè)范圍下文件夾 NSUserDomainMask,表示在當(dāng)前用戶下去搜索
    // expandTilde:是否展開全路徑
    // ~/Library/Caches
    //獲取Caches文件夾的路徑
    NSString *cachesPath =  NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];


    // 拼接文件路徑
    NSString *filePath = [cachesPath stringByAppendingPathComponent:@"user.plist"];


    NSLog(@"%@",cachesPath);

    // File文件全路 徑
    [users writeToFile:filePath atomically:YES];

}
- (IBAction)read:(id)sender {
    // plist讀群罄住:之前是對(duì)象怎么存的聊浅,讀取出來也是什么數(shù)組
    NSString *cachesPath =  NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];

    // 拼接文件路徑
    NSString *filePath = [cachesPath stringByAppendingPathComponent:@"user.plist"];
    NSArray *arr = [NSArray arrayWithContentsOfFile:filePath];

}


偏好設(shè)置存儲(chǔ)

  • 偏好設(shè)置存儲(chǔ)NSUserDefaults用來專門做偏好設(shè)置存儲(chǔ)

  • 偏好設(shè)置存儲(chǔ)優(yōu)點(diǎn):

    1. 不需要關(guān)心文件名城看,系統(tǒng)會(huì)自動(dòng)幫你生成一個(gè)文件名
    2. 快速做鍵值對(duì)的存儲(chǔ)
  • 讀取代碼

- (IBAction)save:(id)sender {

     [[NSUserDefaults standardUserDefaults] setObject:@"123" forKey:@"account"];
     [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"autoLogin"];
}
- (IBAction)read:(id)sender {

   NSString *str = [[NSUserDefaults standardUserDefaults] objectForKey:@"account"];
   BOOL autoLogin = [[NSUserDefaults standardUserDefaults] boolForKey:@"autoLogin"];
    NSLog(@"%d",autoLogin);
}

歸檔

歸檔:自定義對(duì)象想要存儲(chǔ)到沙盒(文件夾)恰梢,必須通過歸檔。

自定義對(duì)象要?dú)w檔熙尉,必須要遵守NSCoding協(xié)議

- (IBAction)save:(id)sender {

    Person *person = [[Person alloc] init];
    person.age = 10;
    person.name = @"adas";
    // 獲取temp文件夾路徑
    NSString *tempPath = NSTemporaryDirectory();

    // 獲取Document文件夾路徑
//    NSString *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];

    // 拼接文件全路徑
    NSString *filePath = [tempPath stringByAppendingPathComponent:@"person.data"];

    // 歸檔的時(shí)候讓person對(duì)象調(diào)用encodeWithCoder
    // 傳入多個(gè)參數(shù)臀晃,可以傳入數(shù)組
    [NSKeyedArchiver archiveRootObject:person toFile:filePath];


}
- (IBAction)read:(id)sender {
    // 獲取temp文件夾路徑
    NSString *tempPath = NSTemporaryDirectory();

    // 獲取Document文件夾路徑
    //    NSString *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];

    // 拼接文件全路徑
    NSString *filePath = [tempPath stringByAppendingPathComponent:@"person.data"];
   Person *p =  [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];

    NSLog(@"%@",p.name);
}

Person類實(shí)現(xiàn)

//  Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject<NSCoding>

@property (nonatomic, assign) int age;
@property (nonatomic, strong) NSString *name;

@end
//  Person.m
#import "Person.h"

// 自定義對(duì)象要?dú)w檔,必須要遵守NSCoding協(xié)議
@implementation Person

// 什么時(shí)候調(diào)用:當(dāng)自定義對(duì)象歸檔的時(shí)候調(diào)用
// 作用:告訴系統(tǒng)當(dāng)前對(duì)象哪些屬性需要?dú)w檔
- (void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:_name forKey:@"name"];

    [aCoder encodeInt:_age forKey:@"age"];
}

// init初始化方法,先要初始化父類
// 什么時(shí)候調(diào)用:當(dāng)自定義對(duì)象解檔的時(shí)候調(diào)用
// 作用:告訴系統(tǒng)當(dāng)前對(duì)象哪些屬性需要解檔

// 當(dāng)解析一個(gè)文件的時(shí)候夯秃,就會(huì)調(diào)用initWithCoder
- (id)initWithCoder:(NSCoder *)aDecoder
{
#warning 什么時(shí)候調(diào)用initWithCoder初始化父類
    if (self = [super init]) {

        // 解檔屬性
        // 解檔屬性一定要記得保存到成員屬性里
      _name = [aDecoder decodeObjectForKey:@"name"];

        _age = [aDecoder decodeIntForKey:@"age"];

    }
    return self;
}

@end

initWithCoder補(bǔ)充

#import "RedView.h"
// @interface RedView : UIView

@implementation RedView

// 解檔:肯定會(huì)調(diào)用對(duì)象initWithCoder:,做父類的初始化操作
// 什么時(shí)候調(diào)用[super initWithCoder:aDecoder]:只要父類遵守了NSCoding協(xié)議座咆,就需要調(diào)用

- (id)initWithCoder:(NSCoder *)aDecoder
{
    // super -> UIView
    if (self = [super initWithCoder:aDecoder]) {
        NSLog(@"%s",__func__);
    }
    return self;
}
@end
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市仓洼,隨后出現(xiàn)的幾起案子介陶,更是在濱河造成了極大的恐慌,老刑警劉巖色建,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哺呜,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡镀岛,警方通過查閱死者的電腦和手機(jī)弦牡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來漂羊,“玉大人,你說我怎么就攤上這事卸留∽咴剑” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵耻瑟,是天一觀的道長(zhǎng)旨指。 經(jīng)常有香客問我,道長(zhǎng)喳整,這世上最難降的妖魔是什么谆构? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮框都,結(jié)果婚禮上搬素,老公的妹妹穿的比我還像新娘。我一直安慰自己魏保,他們只是感情好熬尺,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著谓罗,像睡著了一般粱哼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上檩咱,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天揭措,我揣著相機(jī)與錄音胯舷,去河邊找鬼。 笑死绊含,一個(gè)胖子當(dāng)著我的面吹牛桑嘶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播艺挪,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼不翩,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了麻裳?” 一聲冷哼從身側(cè)響起口蝠,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎津坑,沒想到半個(gè)月后妙蔗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡疆瑰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年眉反,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片穆役。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡寸五,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出耿币,到底是詐尸還是另有隱情梳杏,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布淹接,位于F島的核電站十性,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏塑悼。R本人自食惡果不足惜劲适,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望厢蒜。 院中可真熱鬧霞势,春花似錦、人聲如沸郭怪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鄙才。三九已至颂鸿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間攒庵,已是汗流浹背嘴纺。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工败晴, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人栽渴。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓尖坤,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親闲擦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子慢味,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

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