- 沙盒:iOS應(yīng)用程序為自己創(chuàng)建的獨立(不可能兩個程序共用一個沙盒),封閉(每一個應(yīng)用程序的沙盒,只有它自己才能使用),安全(沙盒里邊每個文件夾都有自己特有的刪除渠道.只要自己手動不刪除,文件永遠存在)的一個文件系統(tǒng)目錄.
- 查找某個應(yīng)用程序的沙盒的方法: 點擊[前往]=>同時按住Alt鍵=>選中[資源庫]=>選中Developer文件夾=>CoreSimulator=>Devices=>.......
應(yīng)用程序的沙盒目錄下的四個文件夾:
1:documents:保存應(yīng)用程序運行時生成的持久化數(shù)據(jù),iTunes會備份和恢復(fù)此文件
-
documents
下的inbox
文件:該文件是用來保存由其他應(yīng)用程序請求當前應(yīng)用程序打開的文件
//例如:應(yīng)用A中有一個文件,可以被應(yīng)用程序B打開,那么應(yīng)用B就創(chuàng)建一個文件C去保存A中可被B打開的文件(將A中的文件復(fù)制到C中)再讓B打開A中的文件,而這個C,就是inbox文件(例如微信中打開網(wǎng)頁)
獲取路徑方法:
NSString *documents = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 1, YES)firstObject];
是數(shù)組使用firstObject/lastObject/objectAtIndex:0;因為在查找沙盒路徑,返回的是一個數(shù)組,而這個數(shù)組中只有一個元素,(因為在移動端,不存在多用戶,而PC端,涉及到多用戶問題(管理員,訪客))
2:library:用來存儲應(yīng)用程序的文件數(shù)據(jù),默認設(shè)置,或者其他動態(tài)信息,其中包含兩個文件夾(Caches,Preferences)
獲取路徑方法:
NSString *library = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, 1, YES)firstObject];
-
library/Caches:
存儲緩存文件,這個目錄用于保存那些可再生文件,如網(wǎng)絡(luò)請求數(shù)據(jù)(圖片,音頻,視頻,)鑒于此,應(yīng)用程序最好還是負責刪除這些文件,不會被iTunes同步
獲取路徑方法:
NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, 1, YES)firstObject];
-
library/Preferences:用來存儲用戶的偏好設(shè)置,會將APP的偏好設(shè)置放在這個文件中(夜間模式,無圖模式,永久存儲是否會或者去地理位置),注意:我們用NSUserDefaults存儲的用戶數(shù)據(jù)都會被保存在該目錄下的文件中,會被iTunes同步.
獲取路徑方法:
//注意:通常情況下,Preferences是有系統(tǒng)進行維護,我們很少進行操作
NSString *Preferences = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES)firstObject];
//stringByAppendingString:將路徑與字符串連接在一起拼接為完整路徑
NSString *preferencesPath = [Preferences stringByAppendingString:@"/Preferences"];
3:tmp:用來存儲臨時文件,保存用應(yīng)用程序在運行時的臨時數(shù)據(jù),使用完畢后,再將其從相應(yīng)的文件夾下刪除,應(yīng)用程序沒有運行時,系統(tǒng)也有可能刪除該目錄下的文件,不會被iTunes同步,而且,在iPhone重啟時,該目錄下單文件會被刪除
獲取路徑方法:
NSString *tmp = NSTemporaryDirectory();
4:.app:獲取.app文件:該目錄包含了應(yīng)用程序本身的數(shù)據(jù),包含資源文件和可執(zhí)行文件.程序啟動以后會根據(jù)需求動態(tài)加載(用到了懶加載機制)代碼到或者資源到內(nèi)存中.而且整個目錄是只讀的,不會被iTunes同步
NSString *app = [[NSBundle mainBundle]resourcePath];