資源描述:
《在ios開發(fā)數(shù)據(jù)保存》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、在iOS開發(fā)過程中,不管是做什么應(yīng)用,都會碰到數(shù)據(jù)保存的問題。將數(shù)據(jù)保存到本地,能夠讓程序的運(yùn)行更加流暢,不會出現(xiàn)讓人厭惡的菊花形狀,使得用戶體驗(yàn)更好。下面介紹一下數(shù)據(jù)保存的方式:?1.NSKeyedArchiver:采用歸檔的形式來保存數(shù)據(jù),該數(shù)據(jù)對象需要遵守NSCoding協(xié)議,并且該對象對應(yīng)的類必須提供encodeWithCoder:和initWithCoder:方法。前一個方法告訴系統(tǒng)怎么對對象進(jìn)行編碼,而后一個方法則是告訴系統(tǒng)怎么對對象進(jìn)行解碼。例如對Possession對象歸檔保存。定義Possession:?@interfacePossession:NSOb
2、ject{//遵守NSCoding協(xié)議NSString*name;//待歸檔類型?}@implementationPossession-(void)encodeWithCoder:(NSCoder*)aCoder{[aCoderencodeObject:nameforKey:@"name"];?}?-(void)initWithCoder:(NSCoder*)aDecoder{name=[[aDeCoderdecodeObjectforKey:@"name"]retain];?}歸檔操作:如果對Possession對象allPossession歸檔保存
3、,只需要NSCoder子類NSKeyedArchiver的方法archiveRootObject:toFile:即可。NSString*path=[selfpossessionArchivePath];[NSKeyedArchiverarchiveRootObject:allPossessionstoFile:path]解壓操作:同樣調(diào)用NSCoder子類NSKeyedArchiver的方法unarchiveRootObject:toFile:即可allPossessions=[[NSKeyedUnarchiverunarchiveObjectWithFile:path]
4、retain];缺點(diǎn):歸檔的形式來保存數(shù)據(jù),只能一次性歸檔保存以及一次性解壓。所以只能針對小量數(shù)據(jù),而且對數(shù)據(jù)操作比較笨拙,即如果想改動數(shù)據(jù)的某一小部分,還是需要解壓整個數(shù)據(jù)或者歸檔整個數(shù)據(jù)。2.NSUserDefaults:用來保存應(yīng)用程序設(shè)置和屬性、用戶保存的數(shù)據(jù)。用戶再次打開程序或開機(jī)后這些數(shù)據(jù)仍然存在。NSUserDefaults可以存儲的數(shù)據(jù)類型包括:NSData、NSString、NSNumber、NSDate、NSArray、NSDictionary。如果要存儲其他類型,則需要轉(zhuǎn)換為前面的類型,才能用NSUserDefaults存儲。具體實(shí)現(xiàn)為:保存數(shù)據(jù):?
5、NSUserDefaults*defaults=[NSUserDefaultsstandardUserDefaults];?NSString*name=@”defaultstring?[defaults“;setObject:firstNameforKey:@"name"];?//獲得UIImage實(shí)例??UIImage*image=[[UIImagealloc]initWithContentsOfFile:@"photo.jpg"];??NSData*imageData=UIImageJPEGRepresentation(image,100);//UIImage對象轉(zhuǎn)換
6、成NSData??[defaultssynchronize];//用synchronize方法把數(shù)據(jù)持久化到standardUserDefaults數(shù)據(jù)庫讀取數(shù)據(jù):NSUserDefaults*defaults=[NSUserDefaultsstandardUserDefaults];?NSString*name=[defaultsobjectForKey:@"name"];//根據(jù)鍵值取出name?NSData*imageData=[defaultsdataForKey:@"image"];?UIImage*Image=[UIImageimageWithData:ima
7、geData];//NSData轉(zhuǎn)換為UIImage?3.Write寫入方式:永久保存在磁盤中。具體方法為:第一步:獲得文件即將保存的路徑:?NSArray*documentPaths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);//使用C函數(shù)NSSearchPathForDirectoriesInDomains來獲得沙盒中目錄的全路徑。該函數(shù)有三個參數(shù),目錄類型、hedomainmask、布爾值。其中布爾值表示是否