資料本地化的幾種方式:
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"]);