熊阿偉帥志軍(、江西現代職業技術學院,江西 南昌 330095)
?
淺談ios應用程序開發之沙盒機制
熊阿偉1帥志軍2
(1、2江西現代職業技術學院,江西 南昌 330095)
摘要:在ios開發中,數據持久化的方法主要有SQLite3、Core Data、屬性列表和對象歸檔四種。它們只是4種最常用且簡單的方法,你可以使用傳統的 C語言I/O調用,比如fopen()讀取和寫入數據,也可以使用Cocoa的底層文件管理工具。
關鍵詞:ios應用程序;開發;沙盒機制
在ios開發中,數據持久化的方法主要有SQLite3、Core Data、屬性列表和對象歸檔四種。它們只是4種最常用且簡單的方法,你可以使用傳統的 C語言I/O調用,比如fopen()讀取和寫入數據,也可以使用Cocoa的底層文件管理工具。只不過以上兩種方法都需要多寫很多代碼,并且也沒有必要這么做。當然,如果確實需要的話,選擇它們是沒問題的。
IOS沙盒機制(sandbox)能夠為應用程序的運行提供很好的安全保障,也可以把沙盒機制理解為一種安全系統,應用程序的所有操作都必須通過該安全系統檢測,能夠對各種操作進行權限限制。
屬性列表、對象歸檔、SQLite3和Core Data四種數據持久性都涉及一個共性元素,即應用程序的/Documents文件夾。每個應用程序都有自己的/Documents 文件夾并且應用程序僅能讀寫各自的/ Documents 目錄中的內容。
我們看一下iOS 上的應用程序是如何組織的,為此,需要看主目錄中所包含的Library目錄。在Mac OS10.7版本后,蘋果默認隱藏了Library文件夾,需要在終端中使用defaults write com. apple.finder AppleShowAllFiles -bool true 命令來顯示隱藏功能。
1.若是Xcode5及以下版本,打開一個Finder窗口并導航到主目錄。然后在該目錄中,向下展開到 Library/ApplicationSupport/ iPhone Simulator/。在該目錄中,將可以看到針對當前 Xcode 安裝所支持的每個iOS版本的目錄。例如,進入到表示你的xcode版本所支持的最新版本的目錄,此時,你應該看到多個子文件夾,其中一個文件夾名為 Applications。Xcode5中沙盒的路徑為:/Users/用戶名/Library/Application Support/iPhone Simulator/版本/ Applications/對應應用程序文件夾。
2 .若是X c o d e 6及以上版本,同理找到其中一個名為Applications的文件夾。Xcode6中沙盒的路徑為: /Users/用戶名/Library/Developer/CoreSimulator/Devices/版本/data/ Containers/Data/Applications/對應應用程序文件夾。
雖然此清單代表的是模擬器,但實際設備上的文件結構與此相似。顯而易見,Applications 文件夾就是iOS存儲其應用程序的文件夾。如果打開Applications 文件夾,可以看到一系列文件夾和文件,它們的名稱是較長的字符串。這些名稱都是由Xcode 自動生成的全局唯一標識符。
如果打開其中一個應用程序子目錄,應該會看到一些比較熟悉的內容。在這里,可以找到你構建的其中一個iOS應用程序及其支持的文件夾,主要有Documents、Library、tmp文件夾。分別用于應用程序的數據存儲和臨時文件的存儲。當 iOS 設備執行同步時, iTunes 不會備份/tmp 中的文件,但當不再需要這些文件時,應用程序需要負責刪除/tmp 中的文件,以免免占用文件系統的空間。
既然我們的應用程序位于一個名稱看上去是隨機名稱的文件夾中,那么如何檢索Documents目錄的完整路徑以便讀取和寫入文件呢?實際上這非常容易。我們可以利用C語言函數NSSearchPathForD irectoriesInDomain()來查找各種MAC OS系統下的文件夾。
下面是檢索 Documents 目錄路徑的一些代碼:
NSArray *fileDocumentsPaths = NSSearchPathForDirectori esInDomains(NSDocumentDirectory,NSUserDcmainMask, YES);
NSString *documentsDirectory = [fileDocumentspaths objectAtlndex:O];
NSSearchPathForDirectoriesInDomains函數有三個主要參數,第一個參數表示正在查找Documents目錄,第二個參數表示搜索的范圍局限于沙盒的位置。
我們可以通過在剛剛檢索到的路徑的結尾附加另一個字符串來創建一個文件名。我們將使用專為該目的設計的 NSString 方法,即 stringByAppendingPath Component:,如下所示:
NSString*filename=[documentsDirectorystringByAppending PathComponent:@“theFile. Txt”];
完成此調用之后, filename 將包含 theFile.txt 文件的完整路徑,該文件位于應用程序的 Documents 目錄,我們可以使用filename 來創建、讀取和寫入文件。
獲取對應用程序臨時目錄的引用比獲取對 Documents 目錄的引用更加容易。名為NSTemporaryDirectory()的 Foundation 函數將返回一個字符串,該字符串包含到應用程序臨時目錄的完整路徑。若要為將存儲在臨時'目錄中的某個文件創建一個文件名,我們首先要找到該臨時目錄,然后,通過在該路徑的結尾附加一個文件名。
參考文獻:
[1](美)Paul Deitel. Swift實戰之旅:精通iOS應用開發[M]. 北京:電子工業出版社,2016-1-1
[2]李梓萌. Ios 8應用開發從入門到精通[M].北京:清華大學出版社,2016-1-1
[3]鐘元生. iOS應用開發基礎教程[M]. 北京:電子工業出版社,2015-9-1
[4]楊佩璐. iOS開發范例實戰寶典[M]. 北京:清華大學出版社,2015-5-1
中圖分類號:TP393.08
文獻標識碼:A
文章編號:1671-864X(2016)04-0290-01
作者簡介
1.熊阿偉(1983-),男,江西南昌人,講師,江西現代職業技術學院教師,碩士,主要研究方向:計算機應用、軟件。
2.帥志軍(1977-),男,江西南昌人,副教授,江西現代職業技術學院教師,碩士,主要研究方向:計算機網絡、硬件和軟件。