所謂的數(shù)據(jù)持久化、就是將內(nèi)存中的數(shù)據(jù)模型轉(zhuǎn)換為存儲模型,以及將存儲模型轉(zhuǎn)換為內(nèi)存中的數(shù)據(jù)模型的統(tǒng)稱. 數(shù)據(jù)模型可以是任何數(shù)據(jù)結(jié)構(gòu)或?qū)ο竽P?存儲模型可以是關(guān)系模型、XML、二進(jìn)制流等。
iOS中我們常用的數(shù)據(jù)持久化存儲方式基本有五種:NSUserDefaults、plist文件、NSKeyedArchiver歸檔、SQLite 以及CoreData。其中對于少量的數(shù)據(jù)我們可以采用NSUserDefaults、plist文件、NSKeyedArchiver歸檔 這三種方法、而對于大量數(shù)據(jù)的存儲可以使用SQLite 或者CoreData、當(dāng)然也可使用FMDB。
既然我們要存儲一些內(nèi)容、就需要知道怎么去存儲、以及存好后又怎樣去拿出來使用。今天來說一下關(guān)于NSUserDefaults的知識。
NSUserDefaults又可稱為屬性設(shè)置、它是一個單例。
它支持的數(shù)據(jù)類型有NSString、 NSNumber、NSDate、 NSArray、NSDictionary、BOOL、NSInteger、NSFloat等系統(tǒng)定義的數(shù)據(jù)類型,如果要存放自定義的對象(如自定義的類對象),則必須將其轉(zhuǎn)換成NSData存儲。
對于NSUserDefaults、我們在存儲數(shù)據(jù)時候使用set...forKey...的方法。
NSUserDefaults *myDefaults = [NSUserDefaults standardUserDefaults];
// 向NSUserDefaults中添加內(nèi)容
[myDefaults setObject:@"字符串、數(shù)組、字典等" forKey:@"數(shù)據(jù)類型"];
[myDefaults setBool:YES forKey:@"Bool類型"];
[myDefaults setInteger:100 forKey:@"number"];
當(dāng)然、這個時候我們還需對內(nèi)容進(jìn)行“synchronize”。如果沒有調(diào)用synchronize方法,系統(tǒng)會根據(jù)I/O情況不定時刻地保存到文件中。所以如果需要立即寫入文件的就必須調(diào)用synchronize方法。
[myDefaults synchronize];
當(dāng)我們需要取出存儲的內(nèi)容時候就對應(yīng)的用objectForKey、boolForKey、integerForKey等方法。
// 獲取存儲的內(nèi)容
NSString *string = [myDefaults objectForKey:@"數(shù)據(jù)類型"];
BOOL isBool = [myDefaults boolForKey:@"Bool類型"];
NSInteger number = [myDefaults integerForKey:@"number"];
對于刪除數(shù)據(jù)、使用方法removeObjectForKey來操作。
[myDefaults removeObjectForKey:@"Bool類型"];
[myDefaults synchronize];
綜上所述、對于NSUserDefaults、我們需要掌握它的基本語法功能、存儲和刪除。另外、需要特別注意的就是一定不要忘記對他進(jìn)行同步synchronize。