iOS中幾種數(shù)據(jù)永久存儲方式

iOS中數(shù)據(jù)存儲方式有以下幾種:

(1)煮岁、writeToFile:atomically:

(2)疹鳄、NSUserDefaults

(3)赛蔫、NSKeyedAchiever

(4)逝嚎、使用數(shù)據(jù)庫存儲 SQLite3(該方式見后續(xù)文章)

工具/原料

* X-Code僻弹、Mac

方法/步驟

* 1、使用 writeToFile:atomically: 方法(1)該方法是一次性向文件中寫入內容并炮,本次寫入會覆蓋文件中原來的內容默刚。(2)方法解析:???????? 使用要存儲的數(shù)據(jù)對象 調用該方法,該方法有兩個參數(shù):???????? para1:要寫入的路徑(目標文件路徑)???????? para2 :BOOL型逃魄。若為no荤西,則直接寫入目標文件路徑;若為yes,則先寫到一個臨時的文件中皂冰,然后重命名后移至目標路徑中店展,這樣若在寫入過程中出現(xiàn)了系統(tǒng)崩潰等問題养篓,可以保證最終寫入目標路徑文件的完整性(一般設為yes)秃流。(3)可以存儲的數(shù)據(jù)類型為:???????? 基本數(shù)據(jù)類型、系統(tǒng)的引用(對象)類型柳弄,而自定義的對象類型不能使用該方法存儲舶胀。例:NSArray *array = @[@"你好"];??? [array writeToFile:destinationFilePath atomically:YES];

* 2、NSUserDefaults(1)描述???????? 這是一個單例類碧注,直接操作沙盒中的Library中的Preferences中的一個名為本應用的BundleID的plist文件嚣伐。(2)相關操作????? //首先獲取NSUserDefaults對象NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];1)寫數(shù)據(jù):????? 可存儲的數(shù)據(jù)類型:字符串、數(shù)組萍丐、字典轩端、data、整型逝变、浮點型基茵、BOOL型等//字符串[userDefaults setObject:@"111" forKey:@"1"];//字典NSDictionary *dic = @{@"222":@"2"};[userDefaults setObject:dic forKey:@"2"];//數(shù)組NSArray *array = @[@"333",@"3333"];[userDefaults setObject:array forKey:@"3"];????? 注意:UserDefaults設置數(shù)據(jù)時,不是立即寫入,?是根據(jù)時間戳定時地把緩存中的數(shù)據(jù)寫入本地磁盤。所以調?了set方法之后數(shù)據(jù)有可能還沒有寫入磁盤應用程序就終止了壳影。出現(xiàn)以上問題,可以通過調用synchronize方法強制寫入拱层,方法如下:[userDefaults synchronize];(2)取數(shù)據(jù)://字符串??? NSString *str = [userDefaults objectForKey:@"1"];//字典??? NSDictionary *dic = [userDefaults objectForKey:@"2"];//數(shù)組NSArray *array = [userDefaults objectForKey:@"3"];//布爾型??? BOOL isOk = [userDefaults boolForKey:@"4"];(3)修改數(shù)據(jù)//根據(jù)鍵值刪除對應的對象??? [userDefaults removeObjectForKey:@"2"];

* 3、NSKeyedAchiever???????? (1)將自定義類對象存儲到本地的過程叫對象序列化 從本地讀出自定義類對象的過程叫對象反序列化 也有人將序列化稱為歸檔宴咧。????? (2)想要存儲自定義類對象根灯,則該類要實現(xiàn)NSCoding協(xié)議以及該協(xié)議的兩個方法://編碼方法 aCoder編碼器 在編碼時 會將對象的屬性也進行編碼- (void)encodeWithCoder:(NSCoder *)aCoder{?? ?[aCoder encodeObject:_name forKey:@"name"];}//解碼方法 aDecoder解碼器 在解碼時 會將對象的屬性頁進行解碼- (id)initWithCoder:(NSCoder *)aDecoder{?? ?self.name = [aDecoder decodeObjectForKey:@"name"];}????? (3)同時,若你想自定義 打印該對象的內容掺栅,則需要重寫它的description方法烙肺,只需在重寫的方法中自定義你想打印的內容即可,這里不再贅述氧卧。????? (4)使用NSKeyedArchiver(序列化)/NSKeyedUnarchiver(反序列化)的步驟分別如下:1)序列化步驟:? A桃笙、創(chuàng)建可變數(shù)據(jù) 用于存儲序列化后的數(shù)據(jù) NSMutableData? *data? B、根據(jù)data 創(chuàng)建序列化器? C假抄、編碼? D怎栽、結束編碼? E、將data寫入沙盒? F宿饱、釋放通過 alloc 創(chuàng)建的對象?注:序列化時會調用對象實現(xiàn)的NSCoding協(xié)議中的encodeWithCoder方法 對每個對象進行編碼熏瞄。具體實例:(自定義類:People)??? NSArray *array = @[people1,people2,people3,people4,people5];??? NSMutableData *data1 = [[NSMutableData alloc] init];??? NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data1];??? [archiver encodeObject:array];??? [archiver finishEncoding];??? BOOL isOK = [data1 writeToFile:filePath atomically:YES];??? [archiver release];??? [data1 release]; ??????2)反序列化步驟:??? A、從本地取出你存儲的數(shù)據(jù)?? B谬以、若該數(shù)據(jù)不空强饮,轉至3?? C、創(chuàng)建反序列化器?? D为黎、解碼 并用 數(shù)組 接收(因為你知道存儲的是數(shù)組)?? E邮丰、結束解碼具體實例:??? NSData *data2 = [NSData dataWithContentsOfFile:filePath];??? if (data2)??? {????????? NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data2];????????? NSArray *arr2 = [unarchiver decodeObject];?????? ?? [unarchiver finishDecoding];??? }

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末行您,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子剪廉,更是在濱河造成了極大的恐慌娃循,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件斗蒋,死亡現(xiàn)場離奇詭異捌斧,居然都是意外死亡,警方通過查閱死者的電腦和手機泉沾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門捞蚂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人跷究,你說我怎么就攤上這事姓迅。” “怎么了俊马?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵丁存,是天一觀的道長。 經(jīng)常有香客問我潭袱,道長柱嫌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任屯换,我火速辦了婚禮编丘,結果婚禮上,老公的妹妹穿的比我還像新娘彤悔。我一直安慰自己嘉抓,他們只是感情好,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布晕窑。 她就那樣靜靜地躺著抑片,像睡著了一般。 火紅的嫁衣襯著肌膚如雪杨赤。 梳的紋絲不亂的頭發(fā)上敞斋,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機與錄音疾牲,去河邊找鬼植捎。 笑死,一個胖子當著我的面吹牛阳柔,可吹牛的內容都是我干的焰枢。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼济锄!你這毒婦竟也來了暑椰?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤荐绝,失蹤者是張志新(化名)和其女友劉穎一汽,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體很泊,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡角虫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年沾谓,在試婚紗的時候發(fā)現(xiàn)自己被綠了委造。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡均驶,死狀恐怖昏兆,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情妇穴,我是刑警寧澤爬虱,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站腾它,受9級特大地震影響跑筝,放射性物質發(fā)生泄漏。R本人自食惡果不足惜瞒滴,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一曲梗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧妓忍,春花似錦虏两、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至旁瘫,卻和暖如春祖凫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背酬凳。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工惠况, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人粱年。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓售滤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子完箩,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內容