iOS我眼中的沙盒機(jī)制

一、簡介

  • 1.1 概念:每個iOS應(yīng)用都有自己的應(yīng)用沙盒,應(yīng)用沙盒就是文件系統(tǒng)目錄。
  • 1.2 核心:sandbox對應(yīng)用程序執(zhí)行各種操作的權(quán)限限制 。
  • 1.3 特點:
  • 每個應(yīng)用程序的活動范圍都限定在自己的沙盒里。
  • 不能隨意跨越自己的沙盒去訪問別的應(yīng)用程序沙盒中的內(nèi)容。
  • 在訪問別人沙盒內(nèi)的數(shù)據(jù)時需要訪問權(quán)限。
  • 1.4 概括:
  • 是一種安全體系的表現(xiàn)。
  • 總體來說沙盒就是一種獨立、安全、封閉的空間。
  • 非代碼文件都要保存在此,例如圖像,圖標(biāo),聲音,映像,屬性列表,文本文件等。

注意:

  • APP之間不能相互通,唯獨可以通過URL Scheme可以通信。
  • 每此項目殺死后重新運行對應(yīng)的沙盒路徑是永不相同的。

二、如何查看沙盒內(nèi)的文件

  • 2.1 通過前往文件夾打開

輸入/Users/XXXXX/Library/Developer/CoreSimulator/Devices/YYYYYYYY/data/。其中XXXXX是電腦的用戶名,YYYYYYYY是項目運行時產(chǎn)生的文件夾

三、沙盒內(nèi)有什么文件?各有什么作用?

  • 3.1 沙盒內(nèi)部文件
20.png
  • 3.2 各有什么作用

Documents:保存應(yīng)用運行時生成的需要持久化的數(shù)據(jù),iTunes會自動備份該目錄。
蘋果建議將在應(yīng)用程序中瀏覽到的文件數(shù)據(jù)保存在該目錄下。
Library:

         Caches:
                一般存儲的是緩存文件,例如圖片視頻等,此目錄下的文件不會再應(yīng)用程序退出時刪除。
                 在手機(jī)備份的時候,iTunes不會備份該目錄。
                  例如音頻,視頻等文件存放其中
         Preferences:
                   保存應(yīng)用程序的所有偏好設(shè)置iOS的Settings(設(shè)置),我們不應(yīng)該直接在這里創(chuàng)建文件,
                   而是需要通過NSUserDefault這個類來訪問應(yīng)用程序的偏好設(shè)置。
                  iTunes會自動備份該文件目錄下的內(nèi)容。
                  比如說:是否允許訪問圖片,是否允許訪問地理位置......

tmp:臨時文件目錄,在程序重新運行的時候,和開機(jī)的時候,會清空tmp文件夾。

四、獲取沙盒目錄

  • 4.1 獲取沙盒根目錄

//獲取根目錄
NSString *homePath = NSHomeDirectory();
NSLog(@"Home目錄:%@",homePath);

  • 4.2 獲取Documents目錄

獲取沙盒的Documents目錄
/**
* @param NSDocumentDirectory 獲取Document目錄
* @param NSUserDomainMask 是在當(dāng)前沙盒范圍內(nèi)查找
* @param YES 展開路徑,NO是不展開
* @return Documents文件的路徑
*/
NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask,YES)firstObject];
NSLog(@"Documents目錄:%@", filePath);

  • 4.3 獲取Library目錄

獲取Library文件路徑
/**
* 獲取Library目錄下文件路徑
*
* @param NSLibraryDirectory 獲取Library目錄
* @param NSUserDomainMask 在當(dāng)前的沙盒范圍內(nèi)查找
* @param YES 展開路徑,NO不展開路徑 *
* @return Library文件的路徑
*/
NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,
NSUserDomainMask, YES)firstObject];

  • 4.4 獲取Library/Caches文件目錄

/**
* 獲取Library目錄下文件路徑
*
* @param NSCachesDirectory 獲取Library/Caches目錄
* @param NSUserDomainMask 在當(dāng)前的沙盒范圍內(nèi)查找
* @param YES 展開路徑,NO不展開路徑 *
* @return Caches文件的路徑
*/
NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)firstObject];

  • 獲取Library/Preferences文件目錄Preferences由系統(tǒng)維護(hù),不需要我們手動的獲取文件路徑進(jìn)行操作,而是需要借助NSUserDefault來操作,但是我們是可以獲取到這個文件的。

/**
* 獲取Library目錄下文件路徑
*
* @param NSLibraryDirectory 獲取Library目錄
* @param NSUserDomainMask 在當(dāng)前的沙盒范圍內(nèi)查找
* @param YES 展開路徑,NO不展開路徑 *
* @return test.txt文件的路徑
*/
NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,
NSUserDomainMask, YES)firstObject]stringByAppendingPathComponent:@"Preferences"];

  • 4.5 獲取tmp文件路徑

/**
* 獲取tmp文件目錄下的文件路徑
*
* @return tmp的文件路徑
*/
NSString *filePath = NSTemporaryDirectory();

五、文件讀寫

  • 5.1 向沙盒中寫入文件

NSString *documentsPathW =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)[0];
//寫入文件
if (!documentsPathW) {
NSLog(@"目錄未找到");
}else {
NSString *filePaht = [documentsPath stringByAppendingPathComponent:@"test.txt"];
NSArray *array = [NSArray arrayWithObjects:@"code",@"change", @"world", @"OK", @"", @"是的", nil];
[array writeToFile:filePaht atomically:YES];
}

  • 5.2 向沙盒中讀取文件

NSString *documentsPathR = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)[0];
NSString *readPath = [documentsPathR stringByAppendingPathComponent:@"test.txt"];
NSArray *fileContent = [[NSArray alloc] initWithContentsOfFile:readPath];
NSLog(@"文件內(nèi)容:%@",fileContent);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容