iOS中每一個應用程序都有一個獨立的文件夾,這個文件夾就是沙盒。沙盒用來存儲app的本地文件,例如:音頻、視頻、圖片文件等。而且每一個app的沙盒都是獨立的,即當前app沒有權限訪問其餘app的沙盒,因此說沙盒存儲較之更安全。ios
沙盒的層次結構
數組
Documents: 存放長期使用文件
Library: 系統存放文件
tmp: 臨時文件,APP重啓,該目錄下的文件會清空安全
沙盒路徑bash
沙盒主目錄:
homePath = NSHomeDirectory();appDocuments目錄:
[homePath stringByAppendingPathComponent:@"Documents"];
異步library目錄:
[homePath stringByAppendingPathComponent:@"Library"];uitmp目錄:
[homePath stringByAppendingPathComponent:@"tmp"]atom
路徑其實就是一串字符串,stringByAppendingPathComponent將沙盒主目錄路徑拼接一個文件夾名,意思就是沙盒主目錄下的各個分目錄。spa
plist文件存儲通常都是存取字典和數組,直接寫成plist文件,把它存到應用沙盒當中. 只有在ios當中纔有plist存儲,它是ios特有的存儲方式.線程
// 存數據
- (void)saveForPlist {
NSDictionary *dataDict = @{ @"name" : @"xiaoming",@"age" : @24};
NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)[0];
// 拼接一個文件名
NSString *dict = [path stringByAppendingPathComponent:@"data.plist"];
//dictPath爲存儲路徑,Yes爲線程保護
[dataDict writeToFile:dictPath atomically:YES];
}
// 讀數據
- (void)readForPlist {
NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)[0];
// 數據路徑
NSString *dataPath = [path stringByAppendingPathComponent:@"data.plist"];
NSDictionary *dataDict = [NSDictionary dictionaryWithContentsOfFile:path];
NSLog(@"%@", dataDict);
}
複製代碼
NSUserDefaults偏好設置存儲,不須要路徑,通常用於存儲帳號密碼等信息。
// 存數據
- (void)saveForPreference {
// 獲取偏好設置對象
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
//存儲數據
[defaults setObject:@"xiaoming" forKey:@"name"];
[defaults setInteger:24 forKey:@"age"];
// 同步調用,馬上寫到文件中,不寫這個方法會異步,有延遲
[defaults synchronize];
}
//讀數據
- (void)readForPreference {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *name = [defaults objectForKey:@"name"];
NSInteger *age = [defaults integerForKey:@"age"];
NSLog(@"%@-------%ld",name,age);
}
複製代碼
偏好設置存儲新的數據,不會覆蓋原有文件,會在原文件裏面續寫。
歸檔通常都是保存自定義對象的時候,使用歸檔.由於plist文件不可以保存自定義對象.若是一個字典當中保存有自定義對象,若是把這個字典寫入到文件當中,它是不會生成plist文件的.
// 存數據:
- (void)saveForNSKeyedArchiver {
Person *person = [[Person alloc] init];
person.name = @"小明";
person.age = 24;
// 獲取沙盒目錄
NSString *tempPath = NSTemporaryDirectory();
NSString *filePath = [tempPath stringByAppendingPathComponent:@"Person.data"];
NSLog(@"%@",tempPath);
[NSKeyedArchiver archiveRootObject:per toFile:filePath];
}
// 讀數據:
- (void)readForNSKeyedArchiver {
// 獲取沙盒目錄
NSString *tempPath = NSTemporaryDirectory();
NSString *filePath = [tempPath stringByAppendingPathComponent:@"Person.data"];
Person *person = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
NSLog(@"%@-----%li",per.name,per.age);
}
複製代碼