1. 程式人生 > >iOS-沙盒機制-整合篇

iOS-沙盒機制-整合篇

前言:突然想學習一下,沙盒,看了那麼多部落格,我四處的蒐集一下總結一下,為了以後方便學習,留存一篇整合的文章。

一、沙盒機制
  • 1.簡介:
        --概念:每個iOS應用都有自己的應用沙盒,應用沙盒就是檔案系統目錄。
        --核心:sandbox對應用程式執行各種操作的許可權限制          
        --特點:         
                1.每個應用程式的活動範圍都限定在自己的沙盒裡
                2.不能隨意跨越自己的沙盒去訪問別的應用程式沙盒中的內容
               (iOS8已經部分開放訪問extension)
                3.
    在訪問別人沙盒內的資料時需要訪問許可權。 --概括: 1.是一種安全體系的表現 2.總體來說沙盒就是一種獨立、安全、封閉的空間。 3.非程式碼檔案都要儲存在此,例如影象,圖示,聲音,映像,屬性列表,文字檔案等。 --*注意: APP之間不能相互通,唯獨可以通過URL Scheme可以通訊
  • 2.如何檢視沙盒?
    1).前往資料夾開啟
        直接在Finder->前往->前往資料夾(或者點選桌面空白處command+shift+g),
    輸入上面的內容即可。記住將XXXXX換成你的電腦使用者名稱。
        /Users/XXXXX/Library/Developer/CoreSimulator/
    2).通過finder逐步查詢

    通過finder逐步查詢
  • 2.沙盒裡邊有什麼?作用是什麼?
    --沙盒內部:

    Paste_Image.png
    --內部檔案作用:
      -- Documents:儲存應用執行時生成的需要持久化的資料,iTunes會自動備份該目錄。
                    蘋果建議將在應用程式中瀏覽到的檔案資料儲存在該目錄下。
      -- Library:
                  Caches:
                           一般儲存的是快取檔案,例如圖片視訊等,此目錄下的檔案不會再應用程式退出時刪除。
                          *在手機備份的時候,iTunes不會備份該目錄。
                            例如音訊,視訊等檔案存放其中
                  Preferences:
                            儲存應用程式的所有偏好設定iOS的Settings(設定),我們不應該直接在這裡建立檔案,
                            而是需要通過NSUserDefault這個類來訪問應用程式的偏好設定。
                           *iTunes會自動備份該檔案目錄下的內容。
                            比如說:是否允許訪問圖片,是否允許訪問地理位置......
      -- tmp:臨時檔案目錄,在程式重新執行的時候,和開機的時候,會清空tmp資料夾。
  • 2.通過程式碼獲取沙盒路徑
    1).獲取沙盒的Home目錄
      //獲取根目錄 
      NSString *homePath = NSHomeDirectory(); 
      NSLog(@"Home目錄:%@",homePath);
    2).獲取沙盒的Documents目錄
     /* 獲取Documents資料夾目錄,
        @param NSDocumentDirectory  獲取Document目錄
        @param NSUserDomainMask     是在當前沙盒範圍內查詢
        @param YES                  展開路徑,NO是不展開
        @return test.txt檔案的路徑
     */
      NSString *filePath =[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
                           NSUserDomainMask,YES)firstObject]stringByAppendingPathComponent:@"test.txt"];
    3).獲取Library檔案路徑
    /**
     * 獲取Library目錄下檔案路徑
     *
     * @param NSLibraryDirectory      獲取Library目錄
     * @param NSUserDomainMask        在當前的沙盒範圍內查詢 
     * @param YES                     展開路徑,NO不展開路徑 *
     * @return  test.txt檔案的路徑 
     */ NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,    
                             NSUserDomainMask, YES)firstObject]stringByAppendingPathComponent:@"test.txt"];
    4).獲取Library/Caches檔案目錄
    /**
     * 獲取Library目錄下檔案路徑
     *
     * @param NSCachesDirectory       獲取Library/Caches目錄
     * @param NSUserDomainMask        在當前的沙盒範圍內查詢 
     * @param YES                     展開路徑,NO不展開路徑 *
     * @return  test.txt檔案的路徑 
     */NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory,    
                             NSUserDomainMask, YES)firstObject]stringByAppendingPathComponent:@"test.txt"];
    5).獲取Library/Preferences檔案目錄
    Preferences由系統維護,不需要我們手動的獲取檔案路徑進行操作,而是需要藉助NSUserDefault來操作,但是我們是可以獲取到這個檔案的。
    /**
     * 獲取Library目錄下檔案路徑
     *
     * @param NSLibraryDirectory        獲取Library目錄
     * @param NSUserDomainMask          在當前的沙盒範圍內查詢 
     * @param YES                       展開路徑,NO不展開路徑 *
     * @return  test.txt檔案的路徑 
     */
       NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,    
                             NSUserDomainMask, YES)firstObject]stringByAppendingPathComponent:@"Preferences"];
    6).獲取tmp檔案路徑
    /** 
     * 獲取tmp檔案目錄下的檔案路徑
     * 
     * @return test.txt的檔案路徑 
     */
      NSString *filePath = [NSTemporaryDirectory()stringByAppendingPathComponent:@"test.txt"]
    7).向沙盒中寫入檔案
    //向沙盒中寫入檔案
     NSString *documentsPathW = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)[0];
    //寫入檔案
    if (!documentsPathW) {
         NSLog(@"目錄未找到"); 
         }else { 
       NSString *filePaht = [documentsPath stringByAppendingPathComponent:@"test.txt"];
       NSArray *array = [NSArray arrayWithObjects:@"code",@"change", @"world", @"OK", @"", @"是的", nil];
      [array writeToFile:filePaht atomically:YES];}
    8).向沙盒中讀取檔案
    //從沙盒中讀取檔案
      NSString *documentsPathR = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)[0];
      NSString *readPath = [documentsPathR stringByAppendingPathComponent:@"test.txt"];
      NSArray *fileContent = [[NSArray alloc] initWithContentsOfFile:readPath];
      NSLog(@"檔案內容:%@",fileContent);
  • 3.程式碼獲取應用程式包的目錄與內容
    1).獲取應用程式包的路徑
      NSString *imagePath = [NSBundle mainBundle].resourcePath;
    -- 程式包檔案,包含了資原始檔和可執行檔案AppName.app
    2).獲取程式包中一個圖片資源路徑的方法(apple.png)
      NSString *imagePath = [[NSBundle mainBundle]pathForResource:@"apple" ofType:@"png"];
      注意:
           1.imageWithname這種載入的方式是有快取的,第二次在載入時直接從記憶體中取出圖片,
             這樣的話效率更高,但是會使得記憶體變得越來越大,通常使用在,圖片記憶體較小,
             而且需要頻繁使用的地方。
           2.NSBundle mainBundle 是通過獲取圖片的全路徑來載入圖片的,
             不會有快取,但是這樣每次就得重新載入,它也不會是在不是在使用完圖片後就釋放,
             而是在下一次使用圖片的時候才會釋放,所以需要我們在使用完圖片後,手動來釋放記憶體。
    3).將NSData型別的資料儲存到本地(以圖片為例)
  • 常用兩種初始化image的方式:
    1:使用imageNamed:
      第一次讀取的時候,會先把這個圖片放到快取當中,下次在使用到這個同名的圖片時,直接從快取中讀取.
      優點:
           方便快捷,只有第一次使用的時候稍慢,接下來在使用就會快些.
      缺點:
           如果在當前工程中大量會大量的浪費記憶體空間
       UIImage *image = [UIImage imageNamed:@"[email protected]"];
       //這種初始化方法可以直接不給出圖片的具體名字,它會自動匹配
    2:使用initWithContentsOfFile:
      初始化圖片時,每次都會根據路徑去讀取,不會佔用記憶體,如果圖片在當前工程中只使用一次,應該選擇這個方法.
  • 程式碼展示:
     #pragma mark --- 將NSData型別的資料儲存到本地(以圖片為例)
     //這種必須拼接圖片的全名稱,否則image路徑為空
      NSString *filePath = [[NSBundle mainBundle] pathForResource:@"[email protected]" ofType:nil];
      UIImage *image = [[UIImage alloc] initWithContentsOfFile:filePath];    
    -
      //將image型別的物件轉換成為NSData型別資料進行儲存
      //使用UIImageJPEGRepresentation:將圖片轉換成為NSData型別   
      //第一個引數:要轉換的image物件         
      //第二個引數:表示圖片壓縮的值   
      //IPhone中將大於2M的圖片,使用該方法,最終會將圖片儲存成jpeg格式              
       NSData *imageData = UIImageJPEGRepresentation(image, 1); 
      //找到路徑儲存
       NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];  
      //最終路徑 
       NSString *imagePath = [documentPath stringByAppendingString:@"/1234.jpeg"];
    -         
      [imageData writeToFile:imagePath atomically:YES]; 
    -
      NSLog(@"imagePath = %@",imagePath);
    -
      //讀取NSData型別的資料
      //需求:將NSData型別的資料讀取出來,轉換成為UIImage型別並且顯示在imageView上
       NSData *newData = [NSData dataWithContentsOfFile:imagePath];
       UIImage *showImage = [[UIImage alloc] initWithData:newData];
       UIImageView *showImageView = [[UIImageView alloc] initWithImage:showImage];
       [self.view addSubview:showImageView];
  • 擴充套件學習網站:
          1.剛剛線上:http://www.superqq.com/blog/2015/07/14/xcode6-dot-4zhu-ce-url-schemebu-zou-xiang-jie/)%E3%80%82
    總結的稍微有點亂,不足的請多提意見,在補充(^__^)

相關推薦

iOS-機制-整合

前言:突然想學習一下,沙盒,看了那麼多部落格,我四處的蒐集一下總結一下,為了以後方便學習,留存一篇整合的文章。 一、沙盒機制 1.簡介: --概念:每個iOS應用都有自己的應用沙

iOS 機制及檔案操作

沙盒機制簡介  iOS應用程式只能在為該程式建立的檔案目錄下進行檔案的讀寫操作,不可以去其它地方訪問,此檔案區域被成為沙盒。 每個iOS應用都有自己的應用沙盒,應用沙盒就是檔案系統目錄,沙盒對應用程式執行各種操作的規定了區域範圍的許可權限制。 特點:     

【理解】 iOS(sandbox)機制(一)

 IOS應用程式只能在為該改程式建立的檔案系統中讀取檔案,不可以去其它地方訪問,此區域被成為沙盒,所以所有的非程式碼檔案都要儲存在此,例如影象,圖示,聲音,映像,屬性列表,文字檔案等。  1.1、每個應用程式都有自己的儲存空間  1.2、應用程式不能翻過自己的圍牆去訪問別的儲存空間的內容  1.3、應用

iOS知識學習】_iOS機制

IOS中的沙盒機制(SandBox)是一種安全體系,它規定了應用程式只能在為該應用建立的資料夾內讀取檔案,不可以訪問其他地方的內容。所有的非程式碼檔案都儲存在這個地方,比如圖片、聲音、屬性列表和文字檔案等。 1.每個應用程式都在自己的沙盒內 2.不能隨意跨越自己的沙盒去訪問

iOS學習之iOS(sandbox)機制和檔案操作(一)

1、iOS沙盒機制  iOS應用程式只能在為該改程式建立的檔案系統中讀取檔案,不可以去其它地方訪問,此區域被成為沙盒,所以所有的非程式碼檔案都要儲存在此,例如影象,圖示,聲音,映像,屬性列表,文字檔案等。  1.1、每個應用程式都有自己的儲存空間  1.2、應用程式不

iOS目錄

jpg tin 信息 程序啟動 word cache intro 文件格式 temp 出於安全考慮,iOS系統的沙盒機制規定每個應用都只能訪問當前沙盒目錄下面的文件(也有例外,比如系統通訊錄能在用戶授權的情況下被第三方應用訪問),這個規則把iOS系統的封閉性展現的淋漓盡致。

iOS文件夾及獲取路勁方法

雜誌 str doc contents 緩存 ask type domain sea iPhone沙盒中有四個文件夾,分別是:documents、tmp、app、library. 1、Documents :用戶生成的文檔或數據,或者應用不能重新新創建的數據,存儲在/Docu

ios測試無法連線到Appstore

ios沙盒測試無法連線到Appstore 沙盒測試的時候一直報以下錯誤: 2018-10-15 21:56:57.823099+0800 iOS[5989:1703401] 讀取本地蘋果訂單 -- 2018-10-15 21:56:58.992553+08

iOS 儲存

NSString*str=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];  NSString*path=[str stringByAppendin

ios檔案操作

獲取沙盒目錄 //獲取沙盒目錄 - (NSString *)getHomePath{ NSString *homePath =NSHomeDirectory(); return homePath; } //獲取Document目錄 - (NSString *)getDocum

iOS目錄中Documents, Library, tmp的作用和區別

1.Documents: 只有使用者生成的檔案、其他資料及其他程式不能重新建立的檔案,應該儲存在<Application_Home>/Documents目錄下面,並將通過iCloud自動備份。 2.Library 可以重新下載或者重新生成的資料應該儲存在<

iOS-目錄結構分析

iOS應用程式為自己建立的一個獨立、封閉、安全的檔案系統目錄. 特點: 1)不可能兩個程式共用一個沙盒 2)每一個應用程式的沙盒,只有它自己才能使用 3)沙盒裡邊每個資料夾都有自己特有的刪除渠道.只要自己手動不刪除,檔案永遠存在 沙盒預設情況下有三個目

打開文件iOS

class sim .com nta 進行 教程 ice nshome nload 有時使用數據庫是需要查看或者更換沙盒裏的數據庫等文件 那麽如何拿到真機的沙盒 查看真機沙盒教程 打開Devices 在xcode的上部導航欄裏,選擇window -> Devi

開啟檔案iOS

  有時使用資料庫是需要檢視或者更換沙盒裡的資料庫等檔案 那麼如何拿到真機的沙盒   檢視真機沙盒教程 開啟Devices 在xcode的上部導航欄裡,選擇window -> Devices and Simulators ---------------------

iOS 獲取模擬器上的路徑

在工程裡寫上如下程式碼,打印出來 NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];

iOS 通過iTunes共享檔案獲取手機Document目錄

iOS 系統提供了檔案共享支援 當手機通過資料線連線到 Mac 的 iTunes 時, 可以在 iTunes 將電腦上的檔案傳輸到 App 的沙盒目錄當中. 為 App 新增離線資料. 也可以將 App 沙盒目錄下儲存的檔案通過 iTunes 匯出到電腦當中. 使用方式: 其實開發當中需

iOS開發 - 獲取真機資料

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Unity IOS讀取路徑圖片

//儲存圖片 -(void)saveImageDocuments:(UIImage *)image{     //拿到圖片     UIImage *imagesave = image;     NSString *path_sandox = NSHomeDirector

iOS開發必收藏】詳解iOS應用程式內使用IAP/StoreKit付費、(SandBox)測試、建立測試賬號流程!【2012-12-11日更新獲取"產品付費數量等於0的問題"】

//——2012-12-11日更新   獲取"產品付費數量等於0這個問題"的原因 看到很多童鞋問到,為什麼每次都返回數量等於0?? 其實有童鞋已經找到原因了,原因是你在 ItunesConnect 裡的 “Contracts,

ios 應用內支付(In-App Purchase,測試,後臺驗證)

1.蘋果iTunes Connect內購產品資訊錄入。 1)建立app內購買專案(Create New),選擇型別: 1.消耗型專案 對於消耗型 App 內購買專案,使用者每次下載時都必須進行購買。一次性服務通常屬於消耗型專案,例如釣魚App 中的魚餌。 2.非消耗型