1、iOS中的沙盒(sandbox)機制
1)iOS應(yīng)用程序只能對自己創(chuàng)建的文件系統(tǒng)讀取文件,這個"獨立","封閉","安全"的空間,稱之為沙盒,所有的非代碼文件都要保存在此。
2)它一般存放著你程序包文件(可執(zhí)行文件)、圖片、聲音、視頻、plist、sqlite數(shù)據(jù)庫以及其他文件
2)每個應(yīng)用程序都有自己的獨立的存儲空間(沙盒),一般情況下應(yīng)用程序是不可以相互訪問沙盒,也有例外,比如系統(tǒng)通訊錄能在用戶授權(quán)的情況下被第三方應(yīng)用訪問
2、沙盒目錄文件的組成以及相關(guān)含義
當(dāng)我們創(chuàng)建我們的應(yīng)用程序時,在每個沙盒中默認(rèn)含有四個文件,如下:
Documnets:
一般我們需要持久的數(shù)據(jù)都放在這個目錄中,你可以在當(dāng)中添加子文件夾,需要注意的是,iTunes備份和恢復(fù)的時候,會包括此目錄
Library:
設(shè)置程序的默認(rèn)設(shè)置和其他狀態(tài)信息
Library/Caches:存放緩存文件,應(yīng)用程序再次啟動過程中需要的信息
Library/Preferences:包含應(yīng)用程序的偏好設(shè)置文件。
tmp:
創(chuàng)建臨時文件的目錄,當(dāng)我們的iOS設(shè)備重啟是,文件會自動被清除
程序.app,與另三個路徑的父路徑不同
這是應(yīng)用程序的程序包目錄,包含應(yīng)用程序的本身。由于應(yīng)用程序必須經(jīng)過簽名,所以您在運行時不能對這個目錄中的內(nèi)容進(jìn)行修改,否則可能會使應(yīng)用程序無法啟動
二、獲取沙盒目錄
1、獲取到沙盒的根目錄
NSString *homePath = NSHomeDirectory();
2、獲取Documents目錄
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *docPath = [paths lastObject];
3、獲取Library中的Cache
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask, YES);
NSString *docPath = [paths lastObject];
4、獲取tmp路徑
NSString *temp = NSTemporaryDirectory();
5、獲取程序包文件路徑
[[NSBundle mainBundle] resourcePath
三、NSString類路徑處理方法
有些時候我們需要對獲取到的文件目錄做一些特殊處理,常用的方法有以下幾個:
比如針對:
NSString *path = @"/Users/apple/testfile.text";
//獲得組成此路徑的各個組成部分,結(jié)果:(“/”,” Users”, “apple”, ”testfile.text”)
- (NSArray *)pathComponents;
// 提取路徑的最后一個組成部分,結(jié)果:testfile.text
- (NSString *)lastPathComponent;
// 刪除路徑的最后一個組成部分,結(jié)果:/Users/apple
- (NSString *)stringByDeletingLastPathComponent;
// 將path添加到現(xiàn)有路徑的末尾,結(jié)果:/Users/apple/testfile.text/app.text
- (NSString *)stringByAppendingPathComponent:(NSString *)str;
// 取路徑最后部分的擴展名,結(jié)果:text
- (NSString *)pathExtension;
// 刪除路徑最后部分的擴展名,結(jié)果:/Users/apple/testfile
- (NSString *)stringByDeletingPathExtension;
// 路徑最后部分追加擴展名,結(jié)果:/Users/apple/testfile.text.jpg
- (NSString *)stringByAppendingPathExtension:(NSString *)str;
四、NSData的基本概念
NSData是用來包裝數(shù)據(jù)用的
NSData存儲的是二進(jìn)制數(shù)據(jù),這樣就屏蔽了數(shù)據(jù)之間的差異,文本、音頻、圖像等數(shù)據(jù)都可以用NSData來存儲
NSMutableData繼承NSData類,可以對該對象進(jìn)行數(shù)據(jù)修改
//string ---> data
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
//data ---> string
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
五、練習(xí)
示例