簡介
- 每個iOS應用都有自己的應用沙盒(應用沙盒就是文件系統(tǒng)目錄)淹冰,與其他文件系統(tǒng)隔離亦歉。應用必須待在自己的沙盒里脯燃,其他應用不能訪問該沙盒
-
應用沙盒的文件系統(tǒng)目錄嵌牺,如下圖所示
- 模擬器應用沙盒的根路徑在:(apple是用戶名,9.0是模擬器版本)
/Users/apple/Library/ApplicationSupport/iPhone Simulator/9.0/Applications
應用沙盒結(jié)構(gòu)分析
- 應用程序包:包含了所有的資源文件和可執(zhí)行文件
- Documents:保存應用運行時生成的需要持久化的數(shù)據(jù),iTunes同步設備時會備份該目錄速址。例如玩焰,游戲應用可將游戲存檔保存在該目錄
- tmp:保存應用運行時所需的臨時數(shù)據(jù),使用完畢后再將相應的文件從該目錄刪除芍锚。應用沒有運行時昔园,系統(tǒng)也可能會清除該目錄下的文件。iTunes同步設備時不會備份該目錄
- Library/Caches:保存應用運行時生成的需要持久化的數(shù)據(jù)并炮,iTunes同步設備時不會備份該目錄默刚。一般存儲體積大、不需要備份的非重要數(shù)據(jù)
- Library/Preference:保存應用的所有偏好設置逃魄,iOS的Settings(設置)應用會在該目錄中查找應用的設置信息荤西。iTunes同步設備時會備份該目錄
應用沙盒目錄的常見獲取方式
- 打印沙盒根目錄:
NSLog(@"%@",NSHomeDirectory())
- Documents:(2種方式)
- 利用沙盒根目錄拼接”Documents”字符串
NSString *home = NSHomeDirectory();
NSString *documents = [home stringByAppendingPathComponent:@"Documents"];
//不建議采用,因為新版本的操作系統(tǒng)可能會修改目錄名
- 利用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種方法)
- 利用沙盒根目錄拼接”Caches”字符串
- 利用NSSearchPathForDirectoriesInDomains函數(shù)(將函數(shù)的第2個參數(shù)改為:NSCachesDirectory即可)
- Library/Preference:通過NSUserDefaults類 存取該目錄下的設置信息
屬性列表
- 屬性列表是一種XML格式的文件,拓展名為plist
- 如果對象是NSString癌瘾、NSDictionary觅丰、NSArray、NSData妨退、NSNumber等類型妇萄,就可以使用writeToFile:atomically:方法直接將對象寫到屬性列表文件中
屬性列表 -- 歸檔
- 將一個NSDictionary對象歸檔到一個plist屬性列表中
//將數(shù)據(jù)封裝成字典
NSMutableDictionary*dict = [NSMutableDictionary dictionary];
[dictsetObject:@"名字"forKey:@"name"];
[dictsetObject:@"13413141314" forKey:@"phone"];
[dictsetObject:@"99" forKey:@"age"];
//將字典持久化到Documents/stu.plist文件中
[dictwriteToFile:pathatomically:YES];