1. 程式人生 > >iOS備忘錄之本地資料詳解

iOS備忘錄之本地資料詳解

應用沙盒

1)每個iOS應用都有自己的應用沙盒(應用沙盒就是檔案系統目錄),與其他檔案系統隔離。應用必須待在自己的沙盒裡,其他應用不能訪問該沙盒

2)應用沙盒的檔案系統目錄,如下圖所示(假設應用的名稱叫Layer)

1353118-9887ba61908edade.jpg

應用沙盒的檔案系統目錄

3)應用沙盒結構分析

  • 應用程式包:(上圖中的Layer)包含了所有的資原始檔和可執行檔案

  • Documents:儲存應用執行時生成的需要持久化的資料,iTunes同步裝置時會備份該目錄。例如,遊戲應用可將遊戲存檔儲存在該目錄

  • tmp:儲存應用執行時所需的臨時資料,使用完畢後再將相應的檔案從該目錄刪除。應用沒有執行時,系統也可能會清除該目錄下的檔案。iTunes同步裝置時不會備份該目錄

  • Library/Caches:儲存應用執行時生成的需要持久化的資料,iTunes同步裝置時不會備份該目錄。一般儲存體積大、不需要備份的非重要資料

  • Library/Preference:儲存應用的所有偏好設定,iOS的Settings(設定)應用會在該目錄中查詢應用的設定資訊。iTunes同步裝置時會備份該目錄

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

  • 沙盒根目錄:NSString *home = NSHomeDirectory();

  • Documents:(2種方式):

i)利用沙盒根目錄拼接”Documents”字串

1 2 3 NSString *home = NSHomeDirectory(); NSString *documents = [home stringByAppendingPathComponent:@"Documents"]; // 不建議採用,因為新版本的作業系統可能會修改目錄名

ii)利用NSSearchPathForDirectoriesInDomains函式

1 2 3 4 5 // NSUserDomainMask 代表從使用者資料夾下找 // YES 代表展開路徑中的波浪字元“~”
NSArray *array =  NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); // 在iOS中,只有一個目錄跟傳入的引數匹配,所以這個集合裡面只有一個元素 NSString *documents = [array objectAtIndex:0];
  • tmp:NSString *tmp = NSTemporaryDirectory();

  • Library/Caches:(跟Documents類似的2種方法)

i)利用沙盒根目錄拼接”Caches”字串

ii)利用NSSearchPathForDirectoriesInDomains函式(將函式的第2個引數改為:NSCachesDirectory即可)

  • Library/Preference:通過NSUserDefaults類存取該目錄下的設定資訊

iOS應用資料儲存的常用方式

  • XML屬性列表(plist)歸檔

  • Preference(偏好設定)

  • NSKeyedArchiver歸檔(NSCoding)

  • SQLite3

  • Core Data

XML屬性列表(plist)歸檔

屬性列表是一種XML格式的檔案,拓展名為plist。

如果物件是NSString、NSDictionary、NSArray、NSData、NSNumber等型別,就可以使用writeToFile:atomically:方法直接將物件寫到屬性列表檔案中。

舉個例子:將一個NSDictionary物件歸檔到一個plist屬性列表中

1 2 3 4 5 6 7 // 將資料封裝成字典 NSMutableDictionary *dict = [NSMutableDictionary dictionary]; [dict setObject:@"母雞" forKey:@"name"]; [dict setObject:@"15013141314" forKey:@"phone"]; [dict setObject:@"27" forKey:@"age"]; // 將字典持久化到Documents/stu.plist檔案中 [dict writeToFile:path atomically:YES];

成功寫入到Documents目錄下:

1461840164876699.png

執行結果

用文字編輯器開啟,檔案內容為:

1353118-b741943dd4a08d67.jpg

文字編輯器檢視

用xcode開啟屬性檔案:

1353118-79356fa27c45eed4.jpg

xcode檢視

讀取屬性列表,恢復NSDictionary物件

1 2 3 4 5 // 讀取Documents/stu.plist的內容,例項化NSDictionary NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path]; NSLog(@"name:%@", [dict objectForKey:@