iOS開發(fā)之數(shù)據(jù)存儲以及刪除

iOS本地數(shù)據(jù)保存有多種方式,歸納如下:

保存到KeyChain(鑰匙串) 存儲為文件 存儲到數(shù)據(jù)庫
保存到沙盒范圍以外的地方价涝,與沙盒無關 包括:歸檔剂桥、plist文件存儲,偏好設置;歸檔或者plist文件存儲可以選擇保存到沙盒中簇宽,而偏好設置系統(tǒng)已經規(guī)定只能保存到沙盒的 SQLite,Core Data;

本章不僅是學習多種數(shù)據(jù)存儲方式惜互,也可學習到其他知識點蜜托,下面就讓我們詳細來看:

儲存為文件
  1. Write寫入方式(這里需要注意多種不同的寫入方式,作為其中一個知識點微酬,處理不好很多同學容易出錯):只能存儲常用的類型绘趋。

具體方法為:
第一步:獲得文件即將保存的路徑,并生成在該路徑下的文件:

 NSString *myDocumentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
NSString *zhigangPath = [myDocumentPath stringByAppendingPathComponent:@"zhigang.plist"];
 NSArray  *array =@[@"study",@"love",@"zhigang"];

第二步:往文件中寫入/讀瓤殴堋:
方法一:

[array writeToFile:zhigangPath atomically:YES]寫入;
NSArray * data = [NSArray arrayWithContentsOfFile:zhigangPath]讀取;

方法二:

    NSURL *urlPath = [NSURL fileURLWithPath:zhigangPath];
    [array writeToURL:urlPath atomically:YES];
    NSArray * data = [NSArray arrayWithContentsOfURL:urlPath];

方法三:

   NSString*fileURL =[@"file://" stringByAppendingString:zhigangPath];
   NSURL*anthorUrlPath = [NSURL URLWithString:fileURL];
   [array writeToURL:urlPath atomically:YES];
   NSArray * data = [NSArray arrayWithContentsOfURL:anthorUrlPath];

解釋下:文中用了fileURLWithPath以及URLWithString兩種不同方法陷遮,我們要分清楚URL和路徑的不同;URL是包含協(xié)議頭 + 主機地址 +資源路徑,如果訪問的資源是本機的,那么主機地址可以省略;而路徑是不用包含協(xié)議頭和主機地址的; 用fileURLWithPath方法包含了"file://"協(xié)議頭,而使用URLWithString創(chuàng)建的URL,與原有的字符串一模一樣;故:

當我們需要根據(jù)一個字符串創(chuàng)建URL的時候,如果這個字符串包含協(xié)議頭,那么使用URLWithString,一般用于網絡資源的URL創(chuàng)建;如果訪問的是本地資源,而且不包含協(xié)議頭,使用fileURLWithPath創(chuàng)建URL垦江。

2.NSUserDefaults:是一個單例對象帽馋,在整個應用程序的生命周期中都只有一個實例。用來保存應用程序設置和屬性、用戶保存的數(shù)據(jù)绽族。存儲在沙盒的Library/Preference中姨涡,NSUserDefaults可以存儲的數(shù)據(jù)類型包括:NSData、NSString吧慢、NSNumber涛漂、NSDate、NSArray检诗、NSDictionary匈仗。寫入和讀取都比較簡單,如下:
寫入:

 NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
 [userDefault setObject:@"123" forKey:@"zhigang"];
 [userDefault synchronize];
  ```
讀确昊拧:

NSString *str = [userDefault objectForKey:@"zhigang"];

3.NSKeyedArchiver:采用歸檔的形式來保存數(shù)據(jù)悠轩,可歸檔自定義對象,該數(shù)據(jù)對象需要遵守NSCoding協(xié)議攻泼,并且該對象對應的類必須提供encodeWithCoder:和initWithCoder:方法火架。前一個方法告訴系統(tǒng)怎么對對象進行編碼,而后一個方法則是告訴系統(tǒng)怎么對對象進行解碼忙菠。*(注意對NSInteger何鸡,NSString的不同操作;)*

**  單個對象歸檔:**

@interface Person : NSObject <NSCoding>//遵守NSCoding協(xié)議
@property (nonatomic,strong) NSString *name;
@property (nonatomic,assign) NSInteger age;
@end

  • (void)encodeWithCoder:(NSCoder *)aCoder{
    [aCoder encodeObject:_name forKey:@"name"];
    [aCoder encodeInteger:_age forKey:@"age"];
    }
  • (nullable instancetype)initWithCoder:(NSCoder *)aDecoder{
    if (self = [super init]) {
    _name = [aDecoder decodeObjectForKey:@"name"];
    _age = [aDecoder decodeIntegerForKey:@"age"];
    }
    return self;
    }]
    歸檔操作:
    只需要NSCoder子類NSKeyedArchiver的方法archiveRootObject:toFile: 即可
    [NSKeyedArchiver archiveRootObject:person toFile:path];]

解檔操作:
同樣調用NSCoder子類NSKeyedArchiver的方法unarchiveRootObject:toFile: 即可
[NSKeyedUnarchiver unarchiveObjectWithFile:path];

**  多個對象歸檔:**
對多個對象進行歸檔只搁,需使用NSData來進行歸檔對象
NSData可以為一些數(shù)據(jù)提供臨時存儲空間音比,以便隨后寫入文件,或者存放從磁盤讀取的文件內容氢惋《呆妫可以使用[NSMutableDatadata]創(chuàng)建可變數(shù)據(jù)空間;

![多對象歸檔](http://upload-images.jianshu.io/upload_images/2851325-4a39cca7c5875d35.jpeg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

NSMutableData *data = [NSMutableData data];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
[archiver encodeObject:person forKey:@"person"];
[archiver encodeObject:bir forKey:@"bir"];
// 存檔完畢(一定要調用這個方法)
[archiver finishEncoding];
[data writeToFile:path atomically:YES];

NSData *undata = [NSData dataWithContentsOfFile:path];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:data];
[unarchiver decodeObjectForKey:@"person"];
[unarchiver decodeObjectForKey:@"bir"];
// 恢復完畢
[unarchiver finishDecoding];

通過代碼基本上發(fā)現(xiàn)其實存檔和解壓是非常簡單的一個事情焰望,不過事實這種方式缺點還是很明顯的骚亿,以這種方式保存數(shù)據(jù)只能一次性歸檔保存以及一次性解壓。數(shù)據(jù)較少的時候如果使用感覺比較方便熊赖,數(shù)據(jù)量過多的時候如果想修改其中的某一條来屠,解壓整個數(shù)據(jù)然后歸檔整個數(shù)據(jù)還是比較耗時的。

  #####存儲到數(shù)據(jù)庫
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末震鹉,一起剝皮案震驚了整個濱河市俱笛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌传趾,老刑警劉巖迎膜,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異浆兰,居然都是意外死亡磕仅,警方通過查閱死者的電腦和手機珊豹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來榕订,“玉大人店茶,你說我怎么就攤上這事〗俸悖” “怎么了贩幻?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長兼贸。 經常有香客問我段直,道長,這世上最難降的妖魔是什么溶诞? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮决侈,結果婚禮上螺垢,老公的妹妹穿的比我還像新娘。我一直安慰自己赖歌,他們只是感情好枉圃,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著庐冯,像睡著了一般孽亲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上展父,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天返劲,我揣著相機與錄音,去河邊找鬼栖茉。 笑死篮绿,一個胖子當著我的面吹牛,可吹牛的內容都是我干的吕漂。 我是一名探鬼主播亲配,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼惶凝!你這毒婦竟也來了吼虎?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤苍鲜,失蹤者是張志新(化名)和其女友劉穎思灰,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坡贺,經...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡官辈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年箱舞,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拳亿。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡晴股,死狀恐怖,靈堂內的尸體忽然破棺而出肺魁,到底是詐尸還是另有隱情电湘,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布鹅经,位于F島的核電站寂呛,受9級特大地震影響,放射性物質發(fā)生泄漏瘾晃。R本人自食惡果不足惜贷痪,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蹦误。 院中可真熱鬧劫拢,春花似錦、人聲如沸强胰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽偶洋。三九已至熟吏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間玄窝,已是汗流浹背牵寺。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留哆料,地道東北人缸剪。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像东亦,于是被迫代替她去往敵國和親杏节。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內容