在應用程序更新過程中被保存的文件:
更新應用程序就是將用戶下載的新版應用程序代替之前的版本。在這個過程中,iTunes會將更新過的應用程序安裝到新的應用程序目錄下,并在刪除老版本之前,將用戶數據文件轉移到新的應用程序目錄下。在更新的過程中,iTunes保證以下目錄中的文件會得以保留:
/Documents
/Library/Preferences
雖然其它用戶目錄下的文件也可能被轉移,但是您不應該假定更新之后該文件還仍然存在。
常用目錄:
/AppName.app ? ? 這是程序包目錄,包含應用程序的本身。
/Documents/ 蘋果建議將程序中建立的或在程序中瀏覽到的文件數據保存在該目錄下,iTunes備份和恢復的時候會包括此目錄,如用戶信息等永久性文件,這個目錄用于存儲用戶數據或其它應該定期備份的信息。iTunes會備份這個目錄的內容。
/Library/Preferences 這個目錄包含應用程序的偏好設置文件。iTunes會備份這個目錄的內容。
/Library/Caches 這個目錄用于存放應用程序專用的支持文件,保存應用程序再次啟動過程中需要的信息。此目錄下文件不會在應用退出刪除,如圖片、視頻緩存,iTunes不對這個目錄的內容進行備份。
/tmp/ 這個目錄用于存放臨時文件,保存應用程序再次啟動過程中不需要的信息。iTunes不對這個目錄的內容進行備份。
沙盒和NSBundle的相關知識點
1、沙盒機制介紹
iOS中的沙盒機制是一種安全體系。每個iOS程序都有一個獨立的文件系統(存儲空間),而且只能在對應的文件系統中進行操作,此區域被稱為沙盒。就是處于安全因素的考慮,ios將各個App分別嚴格地存放在文件系統的獨立位置這樣的機制稱為沙盒(Sandbox)。應用必須待在自己的沙盒里,其他應用不能訪問該沙盒。所有的非代碼文件都要保存在此,例如屬性文件plist、文本文件、圖像、圖標、媒體資源等。沙盒是用來存入緩沖區的,APP關掉,緩存被自動清理。
沙盒路徑:NSLog(@"%@",NSHomeDirectory());
2、沙盒目錄結構
(1)/AppName.app 應用程序的程序包目錄,包含應用程序的本身。由于應用程序必須經過簽名,所以不能在運行時對這個目錄中的內容進行修改,否則會導致應用程序無法啟動。
(2)/Documents/ 保存應用程序的重要數據文件和用戶數據文件等。用戶數據基本上都放在這個位置(例如從網上下載的圖片或音樂文件),該文件夾在應用程序更新時會自動備份,在連接iTunes時也可以自動同步備份其中的數據
(3)/Library 目錄:這個目錄下有兩個子目錄:
可創建子文件夾。可以用來放置您希望被備份但不希望被用戶看到的數據。該路徑下的文件夾,除Caches以外,都會被iTunes備份
* /Library/Caches(緩存) 保存應用程序使用時產生的支持文件和緩存文件(保存應用程序再次啟動過程中需要的信息),還有日志文件最好也放在這個目錄。iTunes 同步時不會備份該目錄并且可能被其他工具清理掉其中的數據。
* /Library/Preferences (偏好)保存應用程序的偏好設置文件(使用 NSUserDefaults( 這個就是放這) 類設置時創建,不應該手動創建;連iTunes可備份,在應用程序更新時會自動備份;plist文件就放在此處)。
(4)/tmp/ 保存應用運行時所需要的臨時數據,該路徑下的文件不會被iTunes備份。iphone 重啟時,會自動清除該目錄下所有文件;例如錄制視頻完成后是放在/temp/;所以應該將視頻文件從該文件夾轉移到相冊中,否則視頻文件就會被系統清理掉
iTunes在與iPhone同步時,備份所有的Documents和/Library/Preferences文件。
3、bundle 是一個目錄,其中包含了程序會使用到的資源,這些資源包含了圖像,聲音,編譯好的代碼,nib文件(用戶也會把bundle稱plug-in),對應bundle,cocoa提供了類NSBundle。
NSBundle:可以理解為沙盒里的App包(比如“微信應用顯示包內容”那個包);應用程序的文件放在Bundle下,所以在Xcode中取文件路徑就從bundle下取;例如read.txt是一個文本文件,取出它的文件路徑,如下: NSString *filePath=[[NSBundle mainBundle]pathForResource:@"read" ofType:@"txt"];
沙箱的作用是隔離應用程序,每個應用程序只能操作自己的沙箱中的東西
// 應用程序的bundle相當于是一個只讀的沙箱環境
參考鏈接: