歸納筆記014:沙盒

沙盒

在OS X系統中查看應用程序沙盒,有兩種方式:

(1)               打開Finder應用程序,通過“command+shift+G”快捷鍵打開“前往文件夾”對話框,用戶可以在該對話框中輸入“/users/<用戶名>/library/”,這樣即可進入OS X的庫名錄。然後依次進入該目錄下的ApplicationSupport/iPhone Simulator/7.0/Applications子目錄。iOS將所有的第三方庫保運在Aoolications目錄下,每個應用都保存在一個稱謂Globally Unique Identifier(GUID)的文件夾中,GUID文件夾就是應用程序沙盒。

(2)               在OS X系統命令行窗輸入“defaultwrite com.apple.finder AppleShowAllFiles –bool true”,然後退出Finder,重啓Finder程序即可看到隱藏文件額文件夾,這樣就可以通過Finder直接進入/users/<用戶名>/library/Application Support/iPhone Simulator/7.0/Applications目錄,同樣可以在該目錄下看到所有第三方應用程序的GUID文件夾。


打開任何應用程序的文件夾,都可看到如下文件結構:

(1)                   Doucuments:除了基於NSUserDefaults的首選擇項設置之外,應用程序的數據、文件都保存在該目錄下。

(2)                   Library:基於NSUserDefaults的首選項參數保存在Library/Preferences目錄下。

(3)                   tmp:該目錄供應應用程序存儲臨時文件,當iOS執行同步時,iTunes不會備份tmp目錄下的文件。當要應用程序不再需要某個臨時文件時,應該負責刪除tmp目錄下的臨時文件,避免佔用內存空間。


獲取Documents目錄

由於我們的應用程序位於GUID文件夾內,這個文件夾的名稱看上去完全隨機,Foundation提供了NSSearchPathForDirectoriesInDomains()函數,示例代碼如下:

NSArry *paths =   NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUser DonmainMask,  YES);

NSString *documentsDirectory  = [paths objectAtIndex:0];


獲取tmp目錄

獲取tmp目錄,直接調用NSTemporaryDirectory()函數即可,該函數將會返回一個字符串,該字符串代表了tmp目錄的完整路徑,示例代碼如下:

NSString *tempPath = NSTemoraryDirectory();


使用Settings Bundle

Settings Bundle時應用程序中的一組特殊文件,用於高速iOS自帶的Settings應用,該應用程序希望通過Setting應用來手機程序參數。

使用SettingBundle設置應用程序參數的最大優勢在於:無須程序員開發界面,應用的設置界面完全由Settings應用提供,開發者只要提供Setting Bundle這組文件即可。

當開發者爲應用提供了SettingBundle之後,該應用的參數設置界面由系統的Settings應用提供,用戶設置的程序參數也由Settings負責保存,每次打開Settings進行設置時,Settings負責讀取用戶設置的參數。應用程序的參數設置界面、數據存儲、讀取邏輯都由Settings應用負責。


屬性列表

對於只需要保存簡單數據的應用而言,使用屬性列表是一個不錯的選擇,NSArray、NSDictionary對象都提供了writeToFile:(NSString*)filePath atonically:(BOOL)flag方法,該方法可以吧NSArray和NSDictionary包含的數據寫入屬性文件。

當恢復這些數據時,只要調用NSArray、NSDictionary的xxxWithContentsOfFile:(NSString*)filePath方法執行初始化即可。

需要指出的是,只有當NSArray和NSDictionary包含的數據寫入屬性文件保存如下類型的對象後,纔可調用writeToFile:(NSString*)filePath atomically:(BOOL)flag方法執行保存:

(1)   NSArray和NSMutableDictionary。

(2)   NSDictionary和NSMutableDictionary。

(3)   NSData和NSMutableData。

(4)   NSString和NSMutableString。

(5)   NSValue和NSNumber。

    這意味着如果NSArry、NSDictionary中保存了其他類型的對象,或保存了程序員自定義類的實例,將不能直接調用NSArray、NSDictionary的writeToFile:(NSString*)filePath atomically:(BOOL)flag方法執行保存。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章