iOS開發--沙盒存儲

沙盒簡介

iOS中每一個應用程序都有一個獨立的文件夾,這個文件夾就是沙盒。沙盒用來存儲app的本地文件,例如:音頻、視頻、圖片文件等。而且每一個app的沙盒都是獨立的,即當前app沒有權限訪問其餘app的沙盒,因此說沙盒存儲較之更安全。ios

沙盒的層次結構
數組

Documents: 存放長期使用文件
Library: 系統存放文件
tmp: 臨時文件,APP重啓,該目錄下的文件會清空安全

沙盒路徑bash

沙盒主目錄:
homePath = NSHomeDirectory();app

Documents目錄:
[homePath stringByAppendingPathComponent:@"Documents"];
異步

library目錄:
[homePath stringByAppendingPathComponent:@"Library"];ui

tmp目錄:
[homePath stringByAppendingPathComponent:@"tmp"]atom

路徑其實就是一串字符串,stringByAppendingPathComponent將沙盒主目錄路徑拼接一個文件夾名,意思就是沙盒主目錄下的各個分目錄。spa

沙盒數據存儲的三種方式

  • plist存儲

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);
}
複製代碼
  • Preference(偏好設置)

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); 
}

複製代碼

偏好設置存儲新的數據,不會覆蓋原有文件,會在原文件裏面續寫。

  • NSKeyedArchiver(歸檔)

歸檔通常都是保存自定義對象的時候,使用歸檔.由於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);
}

複製代碼
相關文章
相關標籤/搜索