標籤:目錄 tle mda alt 設定 程式 settings key 檔案的
IOS中的沙箱機制(SandBox)是一種安全體系,它規定了應用程式只能在為該應用建立的檔案夾內讀取檔案,不可以訪問其他地方的內容。所有的非代碼檔案都儲存在這個地方,比片、聲音、屬性列表和文字檔等。
1.每個應用程式都在自己的沙箱內(提示:在IOS8中已經開放訪問)
2.不能隨意跨越自己的沙箱去訪問別的應用程式沙箱的內容
3.應用程式向外請求或接收資料都需要經過許可權認證
//擷取home目錄 NSString *homePath = NSHomeDirectory(); NSLog(@"home%@",homePath); //擷取documents目錄 //方式1: NSArray *documents = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsPath = [documents lastObject]; NSLog(@"%@",documentsPath); //方式2:拼接字串 NSString *documentPath2 = [homePath stringByAppendingPathComponent:@"Documents"]; NSLog(@"documenPath2:%@",documentPath2); //擷取caches緩衝目錄 NSArray *caches = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); NSString *cachesPath = [caches lastObject]; NSLog(@"cachesPath:%@",cachesPath); //擷取臨時目錄 NSString *tmp = NSTemporaryDirectory(); NSLog(@"tmp:%@",tmp); //在documents目錄下建立檔案 NSFileManager *fm = [NSFileManager defaultManager]; NSString *fileName = [documentsPath stringByAppendingPathComponent:@"1.txt"]; NSString *str = @"hello world"; NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding]; if ([fm createFileAtPath:fileName contents:data attributes:nil]) { NSLog(@"file create successful"); } //讀出檔案的內容 NSError *error = nil; NSString *str2 = [NSString stringWithContentsOfFile:fileName encoding:NSUTF8StringEncoding error:&error]; if (!error) { NSLog(@"str2:%@",str2); } else { NSLog(@"%@",error); } //NSBundle對象:圖片、xib、storyBoard、plist檔案都是放在應用程式套件組合中 NSBundle *bundle = [NSBundle mainBundle]; //擷取包中檔案的路徑; NSString *path = [bundle pathForResource:@"array" ofType:@"plist"]; //載入包中的xib檔案 NSArray *views = [bundle loadNibNamed:@"cell" owner:self options:nil];
使用者喜好設定練習:
NSUserDefaults *userDeafults = [NSUserDefaults standardUserDefaults]; [userDeafults setObject:@"admin" forKey:@"userName"]; [userDeafults setObject:[NSDate date] forKey:@"loginDate"]; [userDeafults setInteger:2 forKey:@"loginTimes"]; //將喜好設定寫到檔案中去 [userDeafults synchronize];//同步方法 //擷取home目錄 NSString *homePath = NSHomeDirectory(); NSLog(@"%@",homePath); NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; NSString *userName = [userDefaults objectForKey:@"userName"]; NSDate *loginDate = [userDefaults objectForKey:@"loginDate"]; NSString *loginTimes = [userDefaults objectForKey:@"loginTimes"]; NSLog(@"%@,%@",userName,loginTimes); NSDateFormatter *df = [[NSDateFormatter alloc]init]; df.dateFormat = @"MM-dd HH-mm-ss"; NSLog(@"loginDate:%@",[df stringFromDate:loginDate]);
注意:UserDefaults設定資料時,不是立即寫入,而是根據時間戳記定時地把緩衝中的資料寫入本地磁碟。所以調用了set方法之後資料有可能還沒有寫入磁碟,應用程式就終止了。出現以上問題,可以通過調用synchornize方法強制寫入:[defaults synchronize];
三、應用沙箱結構分析
應?程式包:(中的Layer)包含了所有的資源檔和可執行檔
Documents:儲存應?運行時產生的需要持久化的資料,iTunes同步裝置時會備份該目錄。例如,遊戲應用可將遊戲存檔儲存在該目錄
tmp:儲存應?運行時所需的臨時資料,使?完畢後再將相應的檔案從該目錄刪除。應用沒有運行時,系統也可能會清除該目錄下的檔案。iTunes同步裝置時 不會備份該目錄
Library/Caches:儲存應用運行時?成的需要持久化的資料,iTunes同步裝置時不會備份該目錄。?一般儲存體積大、不需要備份的非重要資料
Library/Preference:儲存應用的所有喜好設定,iOS的Settings(設定) 應?會在該?錄中尋找應?的設定資訊。iTunes同步裝置時會備份該目錄*參考了別人的請見諒(都是知識點,偷了一下懶)*
IOS 沙箱機制 淺析