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