天天看點

iOS資料存儲方法總結

資料本地化的幾種方式:

1.plist
    2.偏好設定
    3.歸檔
    4.sqlite
    5.CoreData
    6.Keychain
           
  • XML屬性清單(plist)

    plist全名是:Property List,屬性清單檔案,通常被稱為plist檔案。檔案是xml格式的。它是以key-value的形式來存儲資料。

    作用:可以用來存儲使用者設定。

    缺點:plist隻能存儲系統自帶的一些正常的類, 也就是有writeToFile方法的對象才可以使用plist儲存資料。例如:NSString、NSDictionary、NSArray、NSData、 NSNumber等類型

  • Preference(偏好設定)

    偏好設定本質也是 plist。

    作用:偏好設定是專門用來儲存應用程式的配置資訊,比如儲存使用者名、密碼、字型大小、是否自動登入等小資料量資訊。

    缺點:不能存儲大資料。

  • NSKeyedArchiver歸檔(NSCoding)
    可以儲存對象到檔案中,并能從檔案中讀取對象。
               
  • SQLite3 資料庫
    優點:裡面封裝了各種查詢,插入,删除,更新資料等算法,速度非常快。
     缺點:使用相對較難,需要記住sql語句。 
               
  • Core Data

    蘋果提供的資料持久化的架構,是對SQLite3的封裝。

    能夠将OC對象轉化成資料,也能夠将儲存在資料庫中的資料還原成OC對象。

  • Keychain

    Keychain是蘋果提供的帶有可逆加密的存儲機制,普遍用在各種存密碼的需求上。另外,由于App解除安裝隻要系統不重裝,Keychain中的資料依舊能夠得到保留,以及可被iCloud同步的特性,大家都會在這裡存儲使用者唯一辨別串。是以有需要加密、需要存iCloud的敏感小資料,一般都會放在Keychain

資料存儲的位置

Documents :儲存應用運作時生成的需要持久化的資料

Library/Caches : 儲存應用運作時生成的需要持久化的資料,一般存儲體積大、不需要備份的非重要資料

Library/Preference : 儲存應用的所有偏好設定,iOS的Settings(設定)應用會在該目錄中查找應用的設定資訊。

tmp : 儲存應用運作時所需的臨時資料,使用完畢後再将相應的檔案從該目錄删除。

  • 沙盒根目錄的擷取方式:
  • Documents檔案夾:
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
    NSString *filePath = [path stringByAppendingPathComponent:@"xxx.plist"];
           
  • Library/Caches檔案夾:
NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
    NSString *filePath = [path stringByAppendingPathComponent:@"xxx.plist"];
    用法:
    //存
    NSArray *arr = [[NSArray alloc] initWithObjects:@"1", @"2", nil];
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)firstObject];
    NSString *filePath = [path stringByAppendingPathComponent:@"xxx.plist"];
    [arr writeToFile:filePath atomically:YES];
    //取
    NSString *filePath = [path stringByAppendingPathComponent:@"xxx.plist"];
    NSArray *arr = [NSArray arrayWithContentsOfFile:filePath];
           
  • Library/Preference檔案夾:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setBool:self.close forKey:@"close"];
           
  • tmp檔案夾:
  • sqlite

    使用FMDB架構:https://github.com/ccgus/fmdb

    FMDB有三個主要的類:

    FMDatabase,一個FMDatabase對象就代表一個單獨的SQLite資料庫用來執行SQL語句。
    FMResultSet,使用FMDatabase執行查詢後的結果集。
    FMDatabaseQueue,用于在多線程中執行多個查詢或更新,它是線程安全的
               
  • CoreData

    詳情: http://blog.csdn.net/jacob_ios/article/details/51549408

  • Keychain

    Keychain是蘋果提供的帶有可逆加密的存儲機制,普遍用在各種存密碼的需求上。另外,由于App解除安裝隻要系統不重裝,Keychain中的資料依舊能夠得到保留,以及可被iCloud同步的特性,大家都會在這裡存儲使用者唯一辨別串。是以有需要加密、需要存iCloud的敏感小資料,一般都會放在Keychain。

    1.存儲的資訊相對NSUserDefault 或者其它一些存儲在 App 沙盒中的資訊安全很多。

    2.關鍵資訊經過加密處理。

    網上有很多關于 KeyChain 的通路元件,Apple 也提供了相應的 Demo。但是,感覺不怎麼實用,操作起來相對麻煩。

    是以推薦 KIKeyChain 這個元件。https://github.com/smartwalle/KIKeyChain

寫入資料:

KIKeyChain *key = [KIKeyChain keyChainWithIdentifier:@"default_user"];
[key setValue:@"user1" forKey:@"username"];
[key setValue:@"password1" forKey:@"password"];
[key write];
           

讀取資料:

KIKeyChain *key = [KIKeyChain keyChainWithIdentifier:@"default_user"];
NSLog(@"%@==%@", [key valueForKey:@"username"], [key valueForKey:@"password"]);