iOS筆記-數(shù)據(jù)存儲科普篇

任我的詩歌順著你的波濤奔向遠方

數(shù)據(jù)存儲

將數(shù)據(jù)保存到手機里面,保存到應用沙盒(app安裝到手機上的文件夾)
常見方式有以下幾種:
1.XML屬性列表(plist)歸檔
2.Preference(偏好設置)
3.NSKeyedArchiver歸檔(NSCoding)
4.SQLite3
5.Core Data

應用沙盒

  • 每個iOS應用都有自己的應用沙盒(應用沙盒就是文件系統(tǒng)目錄)突委,與其他文件系統(tǒng)隔離松靡。應用必須待在自己的沙盒里暂筝,其他應用不能訪問該沙盒

  • 應用沙盒結(jié)構(gòu)分析(文件夾分析):

    • Documents:保存應用運行時生成的需要持久化的數(shù)據(jù)拂共,iTunes同步設備時會備份該目錄紊馏。例如料饥,游戲應用可將游戲存檔保存在該目錄

    • tmp:保存應用運行時所需的臨時數(shù)據(jù),使用完畢后再將相應的文件從該目錄刪除朱监。應用沒有運行時岸啡,系統(tǒng)也可能會清除該目錄下的文件。iTunes同步設備時不會備份該目錄

    • Library/Caches:保存應用運行時生成的需要持久化的數(shù)據(jù)赫编,iTunes同步設備時不會備份該目錄巡蘸。一般存儲體積大、不需要備份的非重要數(shù)據(jù)

    • Library/Preference:保存應用的所有偏好設置擂送,iOS的Settings(設置)應用會在該目錄中查找應用的設置信息赡若。iTunes同步設備時會備份該目錄

  • 應用沙盒目錄的常見獲取方式

    • 沙盒根目錄
      • NSString * home = NSHomeDirectory();
    • Documents:(兩種方式)
      • 1.利用沙盒根目錄拼接“Documents”字符串(不建議使用)
    // 不建議采用,因為新版本的操作系統(tǒng)可能會修改目錄名
    NSString *home = NSHomeDirectory();
    NSString *documents = [home stringByAppendingPathComponent:@"Documents"];
    
      - 2.利用`NSSearchPathForDirectoriesInDomains`函數(shù)
    
    // NSUserDomainMask 代表從用戶文件夾下找
    // YES 代表展開路徑中的波浪字符“~”
    NSArray *array =  NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, NO);
    // 在iOS中团甲,只有一個目錄跟傳入的參數(shù)匹配逾冬,所以這個集合里面只有一個元素
    NSString *documents = [array objectAtIndex:0];
    
    • tmp:
      • NSString *tmp = NSTemporaryDirectory();
    • Library/Caches:(跟Documents類似的2種方法)
      • 1.利用沙盒根目錄拼接”Caches”字符串
      • 2.利用NSSearchPathForDirectoriesInDomains函數(shù)(將函數(shù)的第2個參數(shù)改為:NSCachesDirectory即可)
    • Library/Preference
      • 通過NSUserDefaults類存取該目錄下的設置信息

1.plist存儲(屬性列表)

  • 屬性列表是一種XML格式的文件,拓展名為plist
  • 如果對象是NSString躺苦、NSDictionary身腻、NSArray、NSData匹厘、NSNumber等類型嘀趟,就可以使用writeToFile:atomically:方法直接將對象寫到屬性列表文件中
存數(shù)據(jù)
  • Plist存儲,就是把某些對象寫成plist文件愈诚,主要描述數(shù)組她按,字典

  • plist文件一般用來存儲數(shù)組和字典

  • plist存儲是蘋果特有的牛隅,只有蘋果才能生成plist

  • plist存儲不能存儲自定義對象

  • 具體用法:

    • 1.定義一個字典
      NSDictionary *dict = @{@"age":@"18",@"name":@"xmg"};

    • 2.搜索文件夾路徑

      • Caches文件夾
      • 在某個范圍內(nèi)容搜索文件夾的路徑
      • directory:獲取哪個文件夾
      • domainMask:在哪個范圍下獲取
      • NSUserDomainMask:在用戶的范圍內(nèi)搜索
      • expandTilde是否展開全路徑,YES:展開
    //NSArray *NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory, NSSearchPathDomainMask domainMask, BOOL expandTilde);
    NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory,
    NSUserDomainMask, YES)[0];
    
    • 3.拼接文件全路徑
     NSString *filePath = [cachePath stringByAppendingPathComponent:@"dict.plist"];`
    
    - 4.寫入文件
    ```objc
    // File:文件全路徑 => 所有文件夾路徑 + 文件路徑
    [dict writeToFile:filePath atomically:YES];
    ```

#####讀數(shù)據(jù)
- 具體使用:
    - 1.獲取Caches文件夾路徑
    ```objc
    NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
    ```
    - 2.拼接文件全路徑
    ```objc
        NSString *filePath = [cachePath stringByAppendingPathComponent:@"dict.plist"];
    ```
    - 3.讀取文件數(shù)據(jù)(存的時候用什么對象存,讀取的時候也用什么對象讀茸锰)
    ```objc
    NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:filePath];
    ```


####2.Preference(偏好設置)
- 很多iOS應用都支持偏好設置媒佣,比如保存用戶名、密碼陵刹、字體大小等設置默伍,iOS提供了一套標準的解決方案來為應用加入偏好設置功能
- 每個應用都有個NSUserDefaults實例,通過它來存取偏好設置
- 比如衰琐,保存用戶名也糊、字體大小、是否自動登錄

#####存數(shù)據(jù)
```objc
    // 偏好設置NSUserDefaults
    // 底層就是封裝了一個字典,利用字典的方式生成plist
    // 好處:不需要關(guān)心文件名,快速進行鍵值對存儲
    // name cyx
    [[NSUserDefaults standardUserDefaults] setObject:@"cyx" forKey:@"name"];
    // age 22
    [[NSUserDefaults standardUserDefaults] setInteger:22 forKey:@"age"];
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"isOn"];
  • 注意:UserDefaults設置數(shù)據(jù)時羡宙,不是立即寫入狸剃,而是根據(jù)時間戳定時地把緩存中的數(shù)據(jù)寫入本地磁盤。所以調(diào)用了set方法之后數(shù)據(jù)有可能還沒有寫入磁盤應用程序就終止了狗热。出現(xiàn)以上問題钞馁,可以通過調(diào)用synchornize方法強制寫入
讀數(shù)據(jù)
   NSString *name = [[NSUserDefaults standardUserDefaults] objectForKey:@"name"];
  BOOL ison =  [[NSUserDefaults standardUserDefaults] boolForKey:@"isOn"];

3.NSKeyedArchiver歸檔(NSCoding)

寫數(shù)據(jù)

    // 歸檔:自定義對象一般使用歸檔,為什么自定義對象需要歸檔,plist存儲不能存儲自定義對象

    Person *person = [[Person alloc] init];
    person.age = 22;
    person.name = @"cyx";

    // temp
    NSString *tempPath = NSTemporaryDirectory();

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

    // 歸檔
    [NSKeyedArchiver archiveRootObject:person toFile:filePath];
    //  -[Person encodeWithCoder:]
讀數(shù)據(jù)
    // 什么對象存,讀取出來就是什么對象

    // temp
    NSString *tempPath = NSTemporaryDirectory();

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

    // 解擋
   Person *p = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
    // -[Person initWithCoder:]
    NSLog(@"%@ %d",p.name,p.age);


“未完待續(xù)...”

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市斗搞,隨后出現(xiàn)的幾起案子指攒,更是在濱河造成了極大的恐慌,老刑警劉巖僻焚,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件允悦,死亡現(xiàn)場離奇詭異,居然都是意外死亡虑啤,警方通過查閱死者的電腦和手機隙弛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狞山,“玉大人全闷,你說我怎么就攤上這事∑计簦” “怎么了总珠?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長勘纯。 經(jīng)常有香客問我局服,道長,這世上最難降的妖魔是什么驳遵? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任淫奔,我火速辦了婚禮,結(jié)果婚禮上堤结,老公的妹妹穿的比我還像新娘唆迁。我一直安慰自己鸭丛,他們只是感情好,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布唐责。 她就那樣靜靜地躺著鳞溉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪妒蔚。 梳的紋絲不亂的頭發(fā)上穿挨,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天月弛,我揣著相機與錄音肴盏,去河邊找鬼。 笑死帽衙,一個胖子當著我的面吹牛菜皂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播厉萝,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼恍飘,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了谴垫?” 一聲冷哼從身側(cè)響起章母,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎翩剪,沒想到半個月后乳怎,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡前弯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年蚪缀,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恕出。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡询枚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出浙巫,到底是詐尸還是另有隱情金蜀,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布的畴,位于F島的核電站渊抄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏苗傅。R本人自食惡果不足惜抒线,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望渣慕。 院中可真熱鬧嘶炭,春花似錦抱慌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至睡陪,卻和暖如春寺渗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背兰迫。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工信殊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人汁果。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓涡拘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親据德。 傳聞我的和親對象是個殘疾皇子鳄乏,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

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