iOS路徑相關的, 都在這了
每個應用的沙盒目錄都是相似的,主要包含圖中所示的4個目錄:
一、MyApp.app
-
該目錄包含了應用程式本身的資料,包括資原始檔和可執行檔案等。程式啟動以後,會根據需要從該目錄中動態載入程式碼或資源到記憶體,這裡用到了lazy loading的思``
-
整個目錄是隻讀的, 為了防止被篡改,應用在安裝的時候會將該目錄簽名。非越獄情況下,該目錄中內容是無法更改的;在越獄裝置上如果更改了目錄內容,對應的簽名就會被改變,這種情況下蘋果官網描述的後果是應用程式將無法啟動,我沒實踐過。
-
不會被iTunes同步
-
獲取方法
NSString *appPath = [[NSBundle mainBundle] bundlePath]
二、Documents
-
存放內容 我們可以將應用程式的資料檔案儲存在該目錄下。不過這些資料型別僅限於不可再生的資料,可再生的資料檔案應該存放在Library/Cache目錄下。
-
會被iTunes同步
-
獲取方法
NSString *document = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
FOUNDATION_EXPORT NSArray *NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory, NSSearchPathDomainMask domainMask, BOOL expandTilde);
該方法用於返回指定範圍內的指定名稱的目錄的路徑集合。有三個引數:
directory
NSSearchPathDirectory型別的enum值,表明我們要搜尋的目錄名稱,比如這裡用NSDocumentDirectory表明我們要搜尋的是Documents目錄。如果我們將其換成NSCachesDirectory就表示我們搜尋的是Library/Caches目錄。
domainMask
NSSearchPathDomainMask型別的enum值,指定搜尋範圍,這裡的NSUserDomainMask表示搜尋的範圍限制於當前應用的沙盒目錄。還可以寫成NSLocalDomainMask(表示/Library)、NSNetworkDomainMask(表示/Network)等。
expandTilde
BOOL值,表示是否展開波浪線~。我們知道在iOS中~的全寫形式是/User/userName,該值為YES即表示寫成全寫形式,為NO就表示直接寫成“~”。
三、Documents/Inbox
-
存放內容 該目錄用來儲存由外部應用請求當前應用程式開啟的檔案。 比如我們的應用叫A,向系統註冊了幾種可開啟的檔案格式,B應用有一個A支援的格式的檔案F,並且申請呼叫A開啟F。由於F當前是在B應用的沙盒中,我們知道,沙盒機制是不允許A訪問B沙盒中的檔案,因此蘋果的解決方案是講F拷貝一份到A應用的Documents/Inbox目錄下,再讓A開啟F。
-
是否會被iTunes同步
是
-
獲取方法
NSHomeDirectory()
四、Library
-
存放內容
蘋果建議用來存放預設設定或其它狀態資訊。
-
是否會被iTunes同步
是,但是要除了Caches子目錄外
-
獲取方法
NSTemporaryDirectory()
五、Library/Caches
-
存放內容
主要是快取檔案,使用者使用過程中快取都可以儲存在這個目錄中。前面說過,Documents目錄用於儲存不可再生的檔案,那麼這個目錄就用於儲存那些可再生的檔案,比如網路請求的資料。鑑於此,應用程式通常還需要負責刪除這些檔案。
-
是否會被iTunes同步
否。
-
獲取方法
NSString *document = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
六、Library/Preferences
-
存放內容
應用程式的偏好設定檔案。我們使用NSUserDefaults寫的設定資料都會儲存到該目錄下的一個plist檔案中,這就是所謂的寫道plist中!
-
是否會被iTunes同步
是
-
獲取方法
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
七、tmp
-
存放內容
各種臨時檔案,儲存應用再次啟動時不需要的檔案。而且,當應用不再需要這些檔案時應該主動將其刪除,因為該目錄下的東西隨時有可能被系統清理掉,目前已知的一種可能清理的原因是系統磁碟儲存空間不足的時候。
-
是否會被iTunes同步
否
-
獲取方法
NSTemporaryDirectory()
其他一些路徑:
NSSearchPathForDirectoriesInDomains(“想要查詢的目錄”,“想要從哪個路徑區域保護區查詢”)
查詢的區域:
typedef NS_OPTIONS(NSUInteger, NSSearchPathDomainMask) {
NSUserDomainMask = 1, // 使用者的主目錄
NSLocalDomainMask = 2, // 當前機器的本地目錄
NSNetworkDomainMask = 4, // 在網路中公開可用的位置
NSSystemDomainMask = 8, // 被蘋果系統提供的,不可更改的位置 (/System)
NSAllDomainsMask = 0x0ffff // 上述所有及未來的位置
};
想要查詢的目錄:
NSApplicationDirectory = 1, // 到applications (Applications)目錄下
NSDemoApplicationDirectory, // 到Applications/Demos目錄下
NSDeveloperApplicationDirectory, // 到Developer/Applications目錄下.
NSAdminApplicationDirectory, // 到Applications/Utilities目錄下
NSLibraryDirectory, // 到Library目錄下
NSDeveloperDirectory, // 到Developer目錄下.
NSUserDirectory, // 到使用者的主目錄下
NSDocumentationDirectory, // 到documentation (Documentation)的目錄下
NSDocumentDirectory, // 到documents (Documents)目錄下
NSCoreServiceDirectory, // CoreServices目錄的位置 (System/Library/CoreServices)
NSAutosavedInformationDirectory NS_ENUM_AVAILABLE(10_6, 4_0) = 11, // 自動儲存的文件位置 (Documents/Autosaved)
NSDesktopDirectory = 12, // 本地使用者的桌面
NSCachesDirectory = 13, // 本地緩衝區目錄(Library/Caches)
NSApplicationSupportDirectory = 14, // 本地應用支援檔案目錄 (plug-ins, etc) (Library/Application Support)
NSDownloadsDirectory NS_ENUM_AVAILABLE(10_5, 2_0) = 15, // 本地下載downloads目錄
NSInputMethodsDirectory NS_ENUM_AVAILABLE(10_6, 4_0) = 16, // 輸入方法目錄 (Library/Input Methods)
NSMoviesDirectory NS_ENUM_AVAILABLE(10_6, 4_0) = 17, // 電影目錄 (~/Movies)
NSMusicDirectory NS_ENUM_AVAILABLE(10_6, 4_0) = 18, // 音樂目錄 (~/Music)
NSPicturesDirectory NS_ENUM_AVAILABLE(10_6, 4_0) = 19, // 圖片目錄 (~/Pictures)
NSPrinterDescriptionDirectory NS_ENUM_AVAILABLE(10_6, 4_0) = 20, // PPDs目錄 (Library/Printers/PPDs)
NSSharedPublicDirectory NS_ENUM_AVAILABLE(10_6, 4_0) = 21, // 本地使用者分享目錄 (~/Public)
NSPreferencePanesDirectory NS_ENUM_AVAILABLE(10_6, 4_0) = 22, // PreferencePanes目錄的位置使用系統的偏好設定 (Library/PreferencePanes)
NSApplicationScriptsDirectory NS_ENUM_AVAILABLE(10_8, NA) = 23, // 本地使用者 scripts 資料夾,對於所需的應用(~/Library/Application Scripts/code-signing-id)
NSItemReplacementDirectory NS_ENUM_AVAILABLE(10_6, 4_0) = 99, // For use with NSFileManager's URLForDirectory:inDomain:appropriateForURL:create:error:
NSAllApplicationsDirectory = 100, // 應用能夠發生的所有路徑
NSAllLibrariesDirectory = 101, //資源可以發生的所有目錄
NSTrashDirectory NS_ENUM_AVAILABLE(10_8, NA) = 102 // 垃圾存放目錄
};
NSHomeDirectory()只能到達使用者的主目錄
列印結果: /Users/yinsuke/Library/Application Support/iPhone Simulator/6.0/Applications/FB3B8EAF-63D9-4CFE-878C-2692093CC763
NSString *tempPath = NSTemporaryDirectory();
/Users/yinsuke/Library/Application Support/iPhone Simulator/6.0/Applications/FB3B8EAF-63D9-4CFE-878C-2692093CC763/tmp/
NSString *fullName=NSFullUserName();
當前使用者的一個完整使用者名稱,在需要的路徑下可以插入進去。
NSString *userName=NSUserName();
返回當前使用者的登陸使用者名稱
NSString * NSHomeDirectoryForUser ( NSString *userName );
返回指定使用者名稱的使用者根目錄(home)
NSString * NSOpenStepRootDirectory (void);
返回當前使用者的系統根目錄
相關文章
- Fragment 相關知識點都在這裡了Fragment
- 關於 Android Service 的介紹都在這了Android
- iOS開發:相對路徑與相對工程名iOS
- iOS探索:網路相關iOS
- 檔案的相對路徑和絕對路徑以及根相對路徑
- 你想知道的關於 Refs 的知識都在這了
- 關於函式由絕對路徑轉為相對路徑函式
- html中的路徑的介紹:絕對路徑和相對路徑HTML
- css檔案與資源路徑相關CSS
- 所有和Java中代理有關的知識點都在這了。Java
- 絕對路徑和相對路徑的區別,
- 絕對路徑和相對路徑的區別
- Qt的相對路徑轉為絕對路徑QT
- Linux檔案的路徑定位-相對路徑和絕對路徑Linux
- HTML絕對路徑與相對路徑HTML
- AI界的State of the Art都在這裡了AI
- 關於工商詳細資訊 API,你想了解的都在這裡了API
- 關於微軟HoloLens 你想知道的都在這兒了微軟
- 詳解關鍵路徑法,這可能是你能找到的最詳盡的了
- 檔案絕對路徑和相對路徑
- Java工程路徑及相對路徑(轉載)Java
- Jsp相對路徑和絕對路徑JS
- 2019年兩會,關於AI的提案都在這兒了AI
- 你要的介面資料都在這裡了
- Chrome 62 Beta的新特性都在這裡了Chrome
- 面試的畢生經驗,都在這裡了面試
- MySQL 高頻面試題,都在這了MySql面試題
- 深入解析Java絕對路徑與相對路徑Java
- javascript將相對路徑修改為絕對路徑JavaScript
- 沙盒路徑-iOSiOS
- web專案絕對路徑與相對路徑的問題Web
- iOS - Foundation相關iOS
- 你想知道的HTML位置資訊都在這裡了HTML
- 曾經面試踩過的坑,都在這裡了~面試
- 05_Linux相對路徑和絕對路徑Linux
- 所有這些基礎的 React.js 概念都在這裡了ReactJS
- 寫文章一年了,我用到的工具都在這兒了!
- 相對路徑轉換為絕對路徑的程式碼例項