App的構成
每一個App都被放在沙盒(sandbox)中,在沙盒中,有一個Containers
,Containers
又被分為Bundle Container
和Data Container
。
SandBox
- Containers
- Bundle Container
- Data Container
屏幕快照 2017-11-28 下午10.58.00.png
Containers下的目錄:
屏幕快照 2017-11-28 下午10.58.07.png
Bundle下的目錄:
屏幕快照 2017-11-28 下午10.58.33.png
Data 下的目錄:
屏幕快照 2017-11-28 下午10.58.55.png
Bundle Container
所謂的Bundle Container
就是我們所創建的工程,以.app結尾,就是一個可執行文件(如下圖所示)。我們寫代碼時導入的圖片,音頻文件也都在這個目錄下。
屏幕快照 2017-11-28 下午11.05.38.png
用代碼訪問該路徑的方法:
NSString *bundleContainerPath = [[NSBundle mainBundle] bundlePath];
NSLog(@"bundle container path:%@", bundleContainerPath);
屏幕快照 2017-11-28 下午11.15.28.png
Data Container
而Data Container
就是App存放數據的目錄。該目錄下又分為
- Document //用戶生成的數據(聊天記錄,下載的文件等),將應用程序的數據文件保存在該目錄下。不過這些數據類型僅限于不可再生的數據,會被iTunes同步。
- Library //蘋果建議用來存放默認設置或其它狀態信息。
----Library/Cache // 主要是緩存文件,保存那些可再生的文件,比如網絡請求的數據。鑒于此,應用程序通常還需要負責刪除這些文件。不會被iTunes同步。
----Library/Preferences //應用程序的偏好設置文件。我們使用NSUserDefaults寫的設置數據都會保存到該目錄下的一個plist文件中。會被iTunes同步 - Temp //各種臨時文件,保存應用再次啟動時不需要的文件。該目錄下的東西隨時有可能被系統清理掉。不會被iTunes同步。
用代碼訪問該路徑的方法:
NSString *dataContainerPath = NSHomeDirectory();
NSLog(@"data container path:%@", dataContainerPath);
屏幕快照 2017-11-28 下午11.15.42.png
訪問Document
目錄:
// ios下只有一個document目錄,所以firstObject即可
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSLog(@"document path:%@", documentPath);
;
NSLog(@"Temp path:%@", tempPath);
屏幕快照 2017-11-28 下午11.25.27.png