OC資料儲存
iOS中的資料儲存(上)
iOS應用資料儲存的常用方式:
1> XML屬性列表(plist)歸檔.
2> Preference(偏好設定).
3> NSKeyedArchiver歸檔.
4> SQLite3
5> Core Data
應用沙盒:
每個iOS應用都有自己的應用沙盒(應用沙盒就是檔案系統目錄)與其他檔案系統隔離.應用必須待在自己的沙盒裡,其他應用不能訪問該沙盒.
模擬器應用沙盒的根路徑在: (apple是使用者名稱, 6.0是模擬器版本)
/Users/apple/Library/Application Support/iPhone Simulator/6.0/Applications
或者:/Users/使用者名稱/資源庫/Application Support/iPhone Simulator/6.1/Applications
注意:
預設情況下,模擬器的目錄是隱藏的,要想顯示出來,需要在Mac終端輸入下面的命令:
顯示Mac隱藏檔案的命令:defaults write com.apple.finder AppleShowAllFiles YES
隱藏Mac隱藏檔案的命令:defaults write com.apple.finder AppleShowAllFiles NO
應用沙盒結構分析
Documents:
儲存應用執行時生成的需要持久化的資料,iTunes同步裝置時會備份該目錄.例如遊戲應用可將遊戲存檔儲存在該目錄.
temp:
儲存應用執行時所需的臨時資料,使用完畢後再將相應的檔案從該目錄刪除.應用沒有執行時,系統也可能會清除該目錄下的檔案.iTunes同步裝置時不會備份該目錄.
Library/Caches:
儲存應用執行時生成的需要持久化的資料,iTunes同步裝置時不會備份該目錄.一般儲存體積大,不需要備份的非重要資料.
Library/Preference:
儲存應用的所有偏好設定,iOS的setting(設定)應用會在該目錄中查詢應用的設定資訊.iTunes同步裝置時會備份該目錄.
應用沙盒目錄的常見獲取方式:
沙盒根路徑:
?
1 |
NSString *home = NSHomeDirectory();
|
Documents:(2種方式)
1> 利用沙盒根目錄拼接"Documents"字串:
1 2 3 |
NSString *home = NSHomeDirectory();
NSString *documents = [home stringByAppendingPathComponent:@ "Documents" ];
// 不建議採用,因為新版本的作業系統可能會修改目錄名
|
2> 利用NSSearchPathForDirectoriesInDomains函式:
?1 2 3 4 5 |
// NSUserDomainMask 代表從使用者資料夾下找
// YES 代表展開路徑中的波浪字元“~”
NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, NO);
// 在iOS中,只有一個目錄跟傳入的引數匹配,所以這個集合裡面只有一個元素
NSString *documents = [array objectAtIndex:0];
|
tmp:
?1 |
NSString *tmp= NSTemporaryDirectory();
|
Library/Catches:(跟Documents類似的兩種方法)
1> 利用沙盒跟目錄拼接"Catches"字串.
2> 利用NSSearchPathForDirectoriesInDomains函式(將函式的第一個引數改為:NSCachesDirectory即可).
Library/Preference:通過NSUserDefaults類存取該目錄下的設定資訊.
下面分別詳細介紹5中資料存數方式.
屬性列表
屬性列表是一種XML格式的檔案,拓展名為plist.
如果物件是NSString, NSDictionary, NSArray, NSData, NSNumber等型別,就可以使用:writeToFile:atomiclly:方法直接將物件寫到屬性列表檔案中.
屬性列表-歸檔NSDictionary
將一個NSDictionary歸檔到一個plist屬性列表中.
?1 2 3 4 5 6 |
// 將資料封裝成字典
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:@ "15013141314" forKey:@ "phone" ];
|