沙盒存儲

l每一個iOS應用都有本身的應用沙盒(應用沙盒就是應用的文件夾),與其餘文件系統隔離。應用必須待在本身的沙盒裏,其餘應用不能訪問該沙盒.可是,再iOS8以後經過某些操做是能夠訪問的函數

l應用沙盒的文件系統目錄,以下圖所示(假設應用的名稱叫Layer)ui

 

應用程序包:(上圖中的Layer)包含了全部的資源文件和可執行文件atom

Documents:保存應用運行時生成的須要持久化的數據,iTunes同步設備時會備份該目錄。例如,遊戲應用可將遊戲存檔保存在該目錄spa

tmp:保存應用運行時所需的臨時數據,使用完畢後再將相應的文件從該目錄刪除。應用沒有運行時,系統也可能會清除該目錄下的文件。iTunes同步設備時不會備份該目錄操作系統

Library/Caches:保存應用運行時生成的須要持久化的數據,iTunes同步設備時不會備份該目錄。通常存儲體積大、不須要備份的非重要數據.net

Library/Preference:保存應用的全部偏好設置,iOS的Settings(設置)應用會在該目錄中查找應用的設置信息。iTunes同步設備時會備份該目錄對象

沙盒根目錄:NSString *home = NSHomeDirectory();token

建立Documents:(2種方式)遊戲

1 利用沙盒根目錄拼接」Documents」字符串資源

NSString *home = NSHomeDirectory();

NSString *documents = [home stringByAppendingPathComponent:@"Documents"];

// 不建議採用,由於新版本的操做系統可能會修改目錄名

2 利用NSSearchPathForDirectoriesInDomains函數

// NSUserDomainMask 表明從用戶文件夾下找

// YES 表明展開路徑中的波浪字符「~」

NSArray *array =  NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, NO);

// 在iOS中,只有一個目錄跟傳入的參數匹配,因此這個集合裏面只有一個元素

NSString *documents = [array objectAtIndex:0];

tmp:NSString *tmp = NSTemporaryDirectory();

Library/Caches:(跟Documents相似的2種方法)

1 利用沙盒根目錄拼接」Caches」字符串

2 利用NSSearchPathForDirectoriesInDomains函數(將函數的第2個參數改成:NSCachesDirectory便可)

Library/Preference:經過NSUserDefaults類存取該目錄下的設置信息

 

尤爲注意:當自定義對象保存至沙盒中時,在自定義對象的各個屬性進行賦值時,必定保證這個自定義對象只建立了一次,而後在這個對象中依次將各個屬性進行了賦值,自定義對象的各個屬性賦值完畢,最後保存至沙盒中,用時再從沙盒中取出。即例如自定義數據類UserInfo;

  • 1 .h文件各個屬性及歸解檔方法以下中:
  • #import <Foundation/Foundation.h>
  • @interface UserInfo : NSObject<NSCoding>
  • @property (nonatomic,copy) NSString *access_token;
  • @property (nonatomic,copy) NSString * expires_in;
  • @property (nonatomic,copy) NSString *uid;
  • @property (nonatomic,copy) NSDate *expires_date;
  • @property (nonatomic,copy) NSString *name;
  • @property (nonatomic,copy) NSString *avatar_large;
  • //用戶是否登錄標記
  • //@property (nonatomic,copy) NSString * userLogin;
  • + (instancetype)userInfoWithDict:(NSDictionary *)dict;
  • - (void)saveUserInfo;//存儲我的信息
  • - (instancetype)loadUserInfo;//加載我的信息
  • @end
  • 2 在某一個控制器中,得到該UserInfo屬性對應值,在該控制器中建立自定義對象userInfo(字典轉模型):UserInfo *userInfo = [UserInfo userInfoWithDict:responseDict];(responseDict既是控制器中得到的對應屬性的值),千萬注意,這個建立的自定義對象userInfo只能此時建立一次,而後依次將對應的屬性賦值過去;若是一個方法中(即responseDict)不能得到自定義對象的全部屬性值,另一些屬性值只能在別的方法中得到,那麼在得到另一些屬性的方法中傳一個帶自定義對象userInfo的參數,而後將該方法中得到的另一些屬性值賦值到自定義對象userInfo參數中,而後在該方法中能夠存儲自定義對象了(即調用saveUserInfo方法保存自定義對象至沙盒中),只有這樣只建立一次自定義對象userInfo,而後其各個屬性賦值完後再保存至沙盒才能夠,其餘屢次建立自定義對象來對屬性賦值或則屬性賦值不徹底就保存至沙盒都是錯誤的。
相關文章
相關標籤/搜索