IOS數據存儲 —— 存儲方式 – iPhone手機開發 iPhone軟體開發教學課程

IOS數據存儲方式

 

iOS開發常用數據存儲方式有:plist、偏好設置 NSUserDefaults、對象歸檔 NSKeyedArchiver、SQLite3和Core Data

 

1. plist文件 存儲

  plist文件通常用於儲存用戶設置,利用xml屬性列表歸檔NSDictionary、NSArray、NSNumber等類型數據

  在使用plist進行數據存儲和讀取,隻適用於系統自帶的一些常用類型才能用

  註意:plist不能存儲自定義對象

  

2. 偏好設置 NSUserDefaults

  偏好設置用來保存“用戶名、密碼、字體大小、是否自動登錄”等設置,主要用於存儲應用的設置信息

  

3. 歸檔 NSKeydeArchiver

  因為前兩者都有一個致命的缺陷,隻能存儲常用的類型。歸檔可以實現把自定義的對象存放在文件中。

  要使用對象歸檔,對象必須實現NSCoding協議。大部分Object C對象都符合NSCoding協議,也可以在自定義對象中實現NSCoding協議,要實現NSCoding協議

  

4. SQLite3

  SQLite是一款輕型的嵌入式數據庫,安卓和ios開發使用的都是SQLite數據庫

  在項目開發中,通常都需要對數據進行離線緩存的處理,如新聞數據的離線緩存等。

  離線緩存一般都是把數據保存到項目的沙盒中,但上述三種方法都有一個致命的缺點,那就是都無法存儲大批量的數據,有性能的問題。

  如果使用歸檔,兩個問題:

    (1)數據的存取都必須是完整的,要求寫入的時候要一次性寫入,讀取的時候要一次性全部讀取,這涉及到應用的性能問題。

    (2)如果有1000條數據,此時要把第1001條數據存入,那麼需要把所有的數據取出來,把這條數據加上去之後,再存入。

  說明:以上的三種技術不能處理大批量數據的存儲,大批量數據通常使用數據庫來進行存儲。

 

5. Core Data

  Core Data是對SQLite的封裝,因為iOS中使用的SQLite是純C語言的。

 

 

 

1. plist 文件的存儲/讀取方法

 

 

// 文件路徑
NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"data.plist"];
// 設置數據
NSArray *data = @[@"jack", @10, @"abcd"];
// 儲存plist
[data writeToFile:path atomically:YES];
// 讀取
NSArray *data2 = [NSArray arrayWithContentsOfFile: path];

 

 

 

2. 偏好設置 NSUserDefaults

 

 

/*  偏好設置——數據存儲   類中有相應屬性  */
- (void)save {
// 1.利用NSUserDefaults,就能直接訪問軟件的偏好設置(Library/Preferences)
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

// 2.存儲數據
    [defaults setObject:@"qr" forKey:@"name"];
    [defaults setObject:@"123" forKey:@"pwd"];
    [defaults setInteger:10 forKey:@"age"];
    [defaults setBool:YES forKey:@"auto_login"];

// 3.立刻同步
    [defaults synchronize];
    
}

 

 

 

/*  偏好設置——讀取數據  */
- (void)read {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSString *account = [defaults objectForKey:@"account"];
    BOOL autoLogin = [defaults boolForKey:@"auto_login"];
    NSLog(@"%@ -- %d", account, autoLogin);

}

 

 

 

 

3. 對象歸檔 NSKeyedArchiver

 

 

/*  歸檔——存儲自定義對象  */
Person *p = [[Person alloc] init];
p.age = 18;   
p.name = @"qr";  
// 拼接文件名
NSString *path = NSTemporaryDirectory() stringByAppendingPathComponent:@"person.data"]; 
[NSKeyedArchiver archiveRootObject:p toFile:Path];
// 解檔
Person *p = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];

 

 

/*  Person 類中要實現的方法  */

// 遵守< NSCoding > 協議

// 什麼時候調用:當一個對象要歸檔的時候就會調用這個方法歸檔
// 作用:告訴蘋果當前對象中哪些屬性需要歸檔
- (void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:_name forKey:@"name"];
    [aCoder encodeInt:_age forKey:@"age"];
}
————————————————————————————
// 作用:告訴蘋果當前對象中哪些屬性需要解檔
// initWithCoder什麼時候調用:隻要解析一個文件的時候就會調用
- (id)initWithCoder:(NSCoder *)aDecoder
{
    #warning  [super initWithCoder]
    // 這裡不能用[super initWithCoder],什麼時候調用[super initWithCoder:aDecoder]:隻要父類遵守瞭NSCoding協議,就調用
    if (self = [super init]) {
        // 解檔
        // 註意一定要記得給成員屬性賦值
      _name = [aDecoder decodeObjectForKey:@"name"];
      _age = [aDecoder decodeIntForKey:@"age"];
    }
    return self;
}

 

 

 

/*  後續給出  */ 

 

4. SQLite3

 

5. Core Data

 

 

 

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *