日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS学习之iOS沙盒(sandbox)机制和文件操作复习

發布時間:2023/12/31 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS学习之iOS沙盒(sandbox)机制和文件操作复习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、iOS沙盒機制

?iOS應用程序只能在為該改程序創建的文件系統中讀取文件,不可以去其它地方訪問,此區域被成為沙盒,所以所有的非代碼文件都要保存在此,例如圖像,圖標,聲音,映像,屬性列表,文本文件等。

?1.1、每個應用程序都有自己的存儲空間
?1.2、應用程序不能翻過自己的圍墻去訪問別的存儲空間的內容
?1.3、應用程序請求的數據都要通過權限檢測,假如不符合條件的話,不會被放行。
? ? ?通過這張圖只能從表層上理解sandbox是一種安全體系,應用程序的所有操作都要通過這個體系來執行,其中核心內容是:sandbox對應用程序執行各種操作的權限限制。

?

?

2、打開模擬器沙盒目錄

下面看看模擬器的沙盒文件夾在mac電腦上的什么位置。

文件都在個人用戶名文件夾下的一個隱藏文件夾里,中文叫資源庫,他的目錄其實是Library。

2.1 方法1、可以設置顯示隱藏文件,然后在Finder下直接打開。設置查看隱藏文件的方法如下:打開終端,輸入命名

?

顯示Mac隱藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true

隱藏Mac隱藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool false

輸完單擊Enter鍵,退出終端,重新啟動Finder就可以了
重啟Finder:鼠標單擊窗口左上角的蘋果標志-->強制退出-->Finder-->

現在能看到資源庫文件夾了。

?

打開資源庫后找到/Application Support/iPhone Simulator/文件夾。這里面就是模擬器的各個程序的沙盒目錄了。

2.2 方法2、這種方法更方便,在Finder上點->前往->前往文件夾,輸入/Users/username/Library/Application Support/iPhone Simulator/ ?前往。

username這里寫你的用戶名。

3、目錄結構

默認情況下,每個沙盒含有3個文件夾:Documents, Library 和 tmp。因為應用的沙盒機制,應用只能在幾個目錄下讀寫文件
Documents:蘋果建議將程序中建立的或在程序中瀏覽到的文件數據保存在該目錄下,iTunes備份和恢復的時候會包括此目錄
Library:存儲程序的默認設置或其它狀態信息;

Library/Caches:存放緩存文件,iTunes不會備份此目錄,此目錄下文件不會在應用退出刪除

tmp:提供一個即時創建臨時文件的地方。

?

iTunes在與iPhone同步時,備份所有的Documents和Library文件。

iPhone在重啟時,會丟棄所有的tmp文件。

?

我們創建一個IosSandbox的項目來展開沙盒和文件讀寫等操作的練習。

創建后找到模擬器上對應的目錄,

這是目錄全展開了。

??

這是上面提到的三個目錄 :Documents、Library、?tmp

?

?

我們看看如何獲取應用程序沙盒目錄。包括真機的沙盒的目錄。

?

1、獲取程序的Home目錄

?

[cpp]?view plaincopy ?
  • NSString?*homeDirectory?=?NSHomeDirectory();??
  • NSLog(@"path:%@",?homeDirectory);??
  • ?

    打印結果:

    [cpp]?view plaincopy ?
  • 2012-06-17?14:00:06.098?IosSandbox[3536:f803]?/Users/rongfzh/Library/Application?Support/iPhone?Simulator/5.1/Applications/3B8EC78A-5EEE-4C2F-B0CB-4C3F02B996D2??
  • 那在真機上的目錄有是怎么樣的呢?我們看看

    2012-06-17 14:25:47.059 IosSandbox[4281:f803]?/var/mobile/Applications/3B8EC78A-5EEE-4C2F-B0CB-4C3F02B996D2

    可見,真機上的目錄是/var/mobile/Applications/這個目錄下的,和模擬器不一樣。這個是Home目錄,其他的子目錄和模擬器一樣。

    ?

    2、獲取document目錄

    [cpp]?view plaincopy ?
  • NSArray?*paths?=?NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,?NSUserDomainMask,?YES);??
  • NSString?*path?=?[paths?objectAtIndex:0];??
  • NSLog(@"path:%@",?path);??
  • 打印結果

    ?

    ?

    [cpp]?view plaincopy ?
  • 2012-06-17?14:00:06.099?IosSandbox[3536:f803]?path:/Users/rongfzh/Library/Application?Support/iPhone?Simulator/5.1/Applications/3B8EC78A-5EEE-4C2F-B0CB-4C3F02B996D2/Documents??
  • 3、獲取Cache目錄

    ?

    ?

    [cpp]?view plaincopy ?
  • NSArray?*paths?=?NSSearchPathForDirectoriesInDomains(NSCachesDirectory,?NSUserDomainMask,?YES);??
  • NSString?*path?=?[paths?objectAtIndex:0];??
  • NSLog(@"%@",?path);??
  • 打印結果

    [cpp]?view plaincopy ?
  • 2012-06-17?14:03:50.431?IosSandbox[3628:f803]?/Users/rongfzh/Library/Application?Support/iPhone?Simulator/5.1/Applications/3B8EC78A-5EEE-4C2F-B0CB-4C3F02B996D2/Library/Caches??

  • 4、獲取Library目錄

    ?

    ?

    [cpp]?view plaincopy ?
  • NSArray?*paths?=?NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,?NSUserDomainMask,?YES);??
  • NSString?*path?=?[paths?objectAtIndex:0];??
  • NSLog(@"%@",?path);??
  • 打印結果

    [cpp]?view plaincopy ?
  • 2012-06-17?14:07:17.544?IosSandbox[3733:f803]?/Users/rongfzh/Library/Application?Support/iPhone?Simulator/5.1/Applications/3B8EC78A-5EEE-4C2F-B0CB-4C3F02B996D2/Library??
  • 5、獲取Tmp目錄

    [cpp]?view plaincopy ?
  • NSString?*tmpDir?=?NSTemporaryDirectory();??
  • ?NSLog(@"%@",?tmpDir);??
  • 打印結果

    ?

    ?

    [cpp]?view plaincopy ?
  • 2012-06-17?14:08:07.824?IosSandbox[3782:f803]?/var/folders/g7/246bh79130zblw0yjjtc55cw0000gn/T/??
  • 6、寫入文件

    [cpp]?view plaincopy ?
  • NSArray?*paths?=?NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,?NSUserDomainMask,?YES);??
  • ????NSString?*docDir?=?[paths?objectAtIndex:0];??
  • ????if?(!docDir)?{??
  • ????????NSLog(@"Documents?目錄未找到");??????????
  • ????}??
  • ????NSArray?*array?=?[[NSArray?alloc]?initWithObjects:@"內容",@"content",nil];??
  • ????NSString?*filePath?=?[docDir?stringByAppendingPathComponent:@"testFile.txt"];??
  • ????[array?writeToFile:filePath?atomically:YES];??
  • ?

    注:我們在真機上也運行一下,把文件寫入,下一步從真機上把內容讀取出來。

    寫入輸入 array ,里面是兩個字符串,一會我們讀出來打印。

    寫入我們在程序沙盒目錄下看到文件 testFile.txt

    ?

    打開文件看到的內容是這樣的,是個xml格式的plist文件,數據格式保存了內容。

    ?

    [cpp]?view plaincopy ?
  • <?xml?version="1.0"?encoding="UTF-8"?>??
  • <!DOCTYPE?plist?PUBLIC?"-//Apple//DTD?PLIST?1.0//EN"?"http://www.apple.com/DTDs/PropertyList-1.0.dtd">??
  • <plist?version="1.0">??
  • <array>??
  • ????<string>內容</string>??
  • ????<string>content</string>??
  • </array>??
  • </plist>??
  • 7、讀取文件

    ?

    ?

    [cpp]?view plaincopy ?
  • NSArray?*paths?=?NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,?NSUserDomainMask,?YES);??
  • ????NSString?*docDir?=?[paths?objectAtIndex:0];??
  • ????NSString?*filePath?=?[docDir?stringByAppendingPathComponent:@"testFile.txt"];??
  • ????NSArray?*array?=?[[NSArray?alloc]initWithContentsOfFile:filePath];??
  • ????NSLog(@"%@",?array);??
  • 打印結果:

    ?

    把上面的文件解析后,把內容打印出來了。

    ?

    [cpp]?view plaincopy ?
  • 2012-06-17?14:14:46.249?IosSandbox[3918:f803]?(??
  • ????"\U5185\U5bb9",??
  • ????content??
  • )??
  • ?

    真機上讀取并打印文件路徑:

    ?

    2012-06-17 14:25:47.059 IosSandbox[4281:f803]?/var/mobile/Applications/3B8EC78A-5EEE-4C2F-B0CB-4C3F02B996D2/Documents/testFile.txt

    ?(

    ?

    ? ? "\U5185\U5bb9",

    ? ? content

    )

    真機上也能寫入和打印。

    著作權聲明:本文由http://blog.csdn.net/totogo2010/原創,歡迎轉載分享。請尊重作者勞動,轉載時保留該聲明和作者博客鏈接,謝謝

    ?

    總結

    以上是生活随笔為你收集整理的iOS学习之iOS沙盒(sandbox)机制和文件操作复习的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。