iOS中數(shù)據(jù)保存的方式分析

iOS中承諾關(guān)鍵的數(shù)據(jù)保存方式有六種:NSUserDefaults:、歸檔、文件保存谢澈、sqlite數(shù)據(jù)庫——iOS數(shù)據(jù)庫、CoreData御板、KeyChain锥忿;

1. NSUserDefaults

1.NSUserDefaults不能保存自定義對象。

2.一般保存用戶名怠肋,密碼敬鬓,設(shè)置項(是否記住密碼、是否在2G/3G自動下載圖片,是否離線下載等)

3.保存基本數(shù)據(jù)類型NSString,NSArray,NSDictionary钉答,用法簡單础芍,一般保存少量的數(shù)據(jù)。

用法:

//保存

[[NSUserDefaults standardUserDefaults] setObject: forKey:];

//取值

[[NSUserDefaults standardUserDefaults] objectForKey:];

//立即保存

[[NSUserDefaultsstandardUserDefaults]synchronize];

//移除

[[NSUserDefaults standardUserDefaults] removeObjectForKey:];

二数尿、歸檔

保存自定義的對象仑性,而且也是保存少量數(shù)據(jù)。相對于在使用plist進行數(shù)據(jù)存儲和讀取右蹦,只適用于系統(tǒng)自帶的一些常用類型才能用诊杆,且必須先獲取路徑相對麻煩,且只能存儲常用類型何陆。

//需要實現(xiàn)NSCoding中的協(xié)議的兩個方法

- (id)initWithCoder:(NSCoder *)aDecoder{

if (self == [super init]) {

self.name = [aDecoder decodeObjectForKey:Name];

self.sex = [aDecoder decodeObjectForKey:Sex];

self.age = [[aDecoder decodeObjectForKey:Age] integerValue];

}

return self;

}

- (void)encodeWithCoder:(NSCoder *)aCoder{

[aCoder encodeObject:self.name forKey:Name];

[aCoder encodeObject:self.sex forKey:Sex];

[aCoder encodeObject:[NSNumber numberWithInteger:self.age] forKey:Age];

}

//歸檔

NSMutableData *data = [[NSMutableData alloc] init];

//創(chuàng)建歸檔輔助類

NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];

//編碼

[archiver encodeObject:model forKey:@"model"];

//結(jié)束編碼

[archiver finishEncoding];

//寫入到沙盒

NSArray *array =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *fileName = [array.firstObject stringByAppendingPathComponent:@"archiverModel"];

if([data writeToFile:fileName atomically:YES]){

NSLog(@"歸檔成功");

}

//解檔

NSData *undata = [[NSData alloc] initWithContentsOfFile:fileName];

//解檔輔助類

NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:undata];

//解碼并解檔出model

TestModel *unModel = [unarchiver decodeObjectForKey:@"model"];

NSLog(@"%@",unModel);

//關(guān)閉解檔

[unarchiver finishDecoding];

三晨汹、文件保存

一般在iOS常用的是plist,一般也是保存少量數(shù)據(jù)贷盲。一般保存數(shù)據(jù)類NSArray,NSDictioanary.此文件包含了應(yīng)用程序的配置信息.系統(tǒng)依賴此文件以獲取應(yīng)用程序的相關(guān)信息

四宰缤、sqlite數(shù)據(jù)庫——iOS數(shù)據(jù)庫


采用SQLite數(shù)據(jù)庫來存儲數(shù)據(jù)。SQLite作為一中小型數(shù)據(jù)庫晃洒,應(yīng)用ios中慨灭,跟前三種保存方式相比,相對比較復(fù)雜一些球及。適合保存大量數(shù)據(jù)氧骤,而且sql增刪改查操作系統(tǒng)都做了優(yōu)化。需要寫sql語句吃引。

五筹陵、CoreData


對sqlite的一個包裝,系統(tǒng)會自動把實體轉(zhuǎn)為sql語句镊尺。好處使用簡單朦佩,而且不需要寫sql語句。適合保存大量數(shù)據(jù)庐氮。

1)初始化方式

NSConfinementConcurrencyType 默認值语稠,允許在特定的線程中執(zhí)行,幾乎不用

NSPrivateQueueConcurrencyType? 只會在主線程中執(zhí)行

NSMainQueueConcurrencyType 允許在子線程中執(zhí)行

-(instancetype)initWithConcurrencyType:(NSManagedObjectContextConcurrencyType)ct

2)設(shè)置持久化存儲協(xié)調(diào)器(屬性)

persistentStoreCoordinator

2.管理模型

1)獲取url

方法:[[[NSBundle mainBundle] URLForResource:(NSString *)name withExtension:(NSString *)ext]弄砍;

2)加載模型

- (nullable instancetype)initWithContentsOfURL:(NSURL *)url;

3)持久化存儲協(xié)調(diào)器

- (instancetype)initWithManagedObjectModel:(NSManagedObjectModel *)model仙畦;

六、KeyChain

超過沙盒范圍的保存方式音婶,一般保存數(shù)據(jù)是:app刪除了慨畸,但是數(shù)據(jù)不刪除。

一般保存隱私數(shù)據(jù)(用戶密碼衣式,token, cookie)

iPhone沙盒模型的有四個文件夾寸士,分別是documents檐什,tmp,app弱卡,Library厢汹。

1、Documents 目錄:應(yīng)用程序數(shù)據(jù)文件在這個目錄下谐宙。這個目錄用于存儲用戶數(shù)據(jù)或其它應(yīng)該定期備份的信息。

2界弧、AppName.app 目錄:這是應(yīng)用程序的程序包目錄凡蜻,包含應(yīng)用程序的本身。不能進行修改垢箕,否則程序不會運行划栓。

3、Library 目錄:這個目錄下有兩個子目錄:Caches 和 Preferences

Preferences 目錄:包含應(yīng)用程序的偏好設(shè)置文件条获。不能直接創(chuàng)建偏好設(shè)置文件忠荞,而是應(yīng)該使用NSUserDefaults類來取得和設(shè)置應(yīng)用程序的偏好屬性.

Caches 目錄:用于存放緩存文件,保存應(yīng)用程序再次啟動過程中需要的信息帅掘。SDWebImage第三方庫的緩存信息處理都在這個文件中委煤,一般的大容量文件都放在這里。

4修档、tmp 目錄:這個目錄用于存放臨時文件碧绞,保存應(yīng)用程序再次啟動過程中不需要的信息。Nsuserdefaults保存的文件一般在tmp文件夾里吱窝。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末讥邻,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子院峡,更是在濱河造成了極大的恐慌兴使,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件照激,死亡現(xiàn)場離奇詭異发魄,居然都是意外死亡,警方通過查閱死者的電腦和手機俩垃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門欠母,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人吆寨,你說我怎么就攤上這事赏淌。” “怎么了啄清?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵六水,是天一觀的道長俺孙。 經(jīng)常有香客問我,道長掷贾,這世上最難降的妖魔是什么睛榄? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮想帅,結(jié)果婚禮上场靴,老公的妹妹穿的比我還像新娘。我一直安慰自己港准,他們只是感情好旨剥,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布呜师。 她就那樣靜靜地躺著黍匾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鞋拟。 梳的紋絲不亂的頭發(fā)上衩椒,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天蚌父,我揣著相機與錄音,去河邊找鬼毛萌。 笑死苟弛,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的阁将。 我是一名探鬼主播嗡午,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼冀痕!你這毒婦竟也來了荔睹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤言蛇,失蹤者是張志新(化名)和其女友劉穎僻他,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腊尚,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡吨拗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了婿斥。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片劝篷。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖民宿,靈堂內(nèi)的尸體忽然破棺而出娇妓,到底是詐尸還是另有隱情,我是刑警寧澤活鹰,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布哈恰,位于F島的核電站只估,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏着绷。R本人自食惡果不足惜蛔钙,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望荠医。 院中可真熱鬧吁脱,春花似錦、人聲如沸彬向。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽幢泼。三九已至,卻和暖如春讲衫,著一層夾襖步出監(jiān)牢的瞬間缕棵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工涉兽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留招驴,地道東北人。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓枷畏,卻偏偏與公主長得像别厘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子拥诡,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

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