IOS應用資料存放區

來源:互聯網
上載者:User

標籤:

IOS應用資料存放區常用方式
- XML屬性列表(plist)歸檔- Preference(喜好設定)- NSKeyedArchiver歸檔(NSCoding)- SQLite3 - Core Data
應用程式沙箱
  • 每個應用程式都有自己的應用沙箱(應用沙箱就是檔案系統目錄)與其它檔案系統隔離。應用必須呆在 自己的沙箱裡,其它應用不能訪問該沙箱
  • 應用沙箱目錄<假設應用程式名稱字Layer> 
應用沙箱結構分析

應用沙箱的常見擷取方式
  • 沙箱根目錄:NSString *home = NSHomeDirectory();

  • Documents:(2種方式) 
    -利用沙箱根目錄拼接”Documents”字串

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

// 不建議採用,因為新版本的作業系統可能會修改目錄名 
利用NSSearchPathForDirectoriesInDomains函數

// NSUserDomainMask 代表從使用者檔案夾下找// YES 代表展開路徑中的波浪字元“~”NSArray *array =  NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, NO);

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

NSString *documents = [array objectAtIndex:0];
屬性列表
- 屬性列表是一種XML格式的檔案,拓展名為plist- 如果對象是NSString、NSDictionary、NSArray、NSData、NSNumber等類型,就可以使用writeToFile:atomically:方法直接將對象寫到屬性列表檔案中
  • 假設儲存一個數組 
    • 寫入檔案
 // directory:擷取哪個檔案夾 NSCachesDirectory,搜尋caches檔案    // domainMask:擷取哪個範圍下檔案夾 NSUserDomainMask,表示在目前使用者下去搜尋    // expandTilde:是否展開全路徑    // 存放在/Library/Caches下    //擷取Caches檔案夾的路徑    NSString *cachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];    // 拼接檔案路徑    NSString *filePath =[cachesPath stringByAppendingPathComponent:@"user.plist"];    /* *  寫入檔案  */    [users writeToFile:filePath atomically:YES];
- 讀取檔案 
    /* *  讀取檔案   */    NSString *cachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];    NSString *path =[cachesPath stringByAppendingPathComponent:@"user.plist"];    NSArray *array =[NSArray arrayWithContentsOfFile:path];    NSLog(@"%@",array);
喜好設定
/* *  NSUserDefaults用來專門做喜好設定儲存*/    /* *  優點:不需要關心檔案名稱,系統會自動建立 用來快速做索引值對的儲存*/    /* * 存放在 Library/Preferences 下 */    /* *  儲存  */    [[NSUserDefaults standardUserDefaults]setObject:@"jack" forKey:@"account"];    [[NSUserDefaults standardUserDefaults]setObject:@"123" forKey:@"pwd"];    [[NSUserDefaults standardUserDefaults]setBool:YES forKey:@"login"];
    /* *  讀取  */    NSString *account =  [[NSUserDefaults standardUserDefaults]objectForKey:@"account"];    BOOL login = [[NSUserDefaults standardUserDefaults]objectForKey:@"login"];    NSString *pwd =  [[NSUserDefaults standardUserDefaults]objectForKey:@"pwd"];    NSLog(@"%@,%d,%@",account,login,pwd );
歸檔
  • person對象
#import <Foundation/Foundation.h>/* *  注意別寫成NSCopying  */@interface Person : NSObject<NSCoding>/* * 年齡   */@property (nonatomic,assign)NSInteger age;/* * 名字   */@property (nonatomic,strong)NSString *name;
/* *  解檔屬性  */- (id)initWithCoder:(NSCoder *)aDecoder{#warning 只要父類遵守NSCodeing協議就會調用initWithCoder    /* *  UIView在解析的時候就會調用initWithCoder 方法 */    if (self = [super init]) {        /* *  解檔屬性一定要儲存到成員變數中  */        _age =[aDecoder decodeIntegerForKey:@"age"];        _name = [aDecoder decodeObjectForKey:@"name"];    }    return self;}/* *  告訴系統哪些對象需要歸檔  */- (void)encodeWithCoder:(NSCoder *)aCoder{    [aCoder encodeObject:_name forKey:@"name"];    [aCoder encodeInteger:_age forKey:@"age"];}
  • 歸檔/解檔
    /* *  歸檔:自訂對象想要儲存到沙箱(檔案夾)必須使用歸檔  */     /* *  歸檔  */    Person *person =[[Person alloc]init];    person.age = 10;    person.name = @"adobe";    /* *  擷取temp檔案夾路徑  */    NSString *temp =NSTemporaryDirectory();    /* *  讀取document檔案夾路徑  */    NSString *documentPath =NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask,YES)[0] ;    /* *  拼接路徑  */    NSString *filePath =[temp stringByAppendingPathComponent:@"person.plist"];    [NSKeyedArchiver archiveRootObject:person toFile:filePath];
 /* *  解檔  */    NSString *tempPath = NSTemporaryDirectory();    /* *  拼接路徑  */    NSString *filePath = [tempPath stringByAppendingPathComponent:@"person.plist"];    Person *p =[NSKeyedUnarchiver unarchiveObjectWithFile:filePath];    NSLog(@"%@,%ld",p.name,p.age);

 

IOS應用資料存放區

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.