概念:歸檔是把對(duì)象寫(xiě)入文件保存在硬盤(pán)中,當(dāng)再次重新打開(kāi)程序時(shí),可以還原這些對(duì)象。
網(wǎng)站設(shè)計(jì)制作過(guò)程拒絕使用模板建站;使用PHP+MYSQL原生開(kāi)發(fā)可交付網(wǎng)站源代碼;符合網(wǎng)站優(yōu)化排名的后臺(tái)管理系統(tǒng);網(wǎng)站制作、網(wǎng)站設(shè)計(jì)收費(fèi)合理;免費(fèi)進(jìn)行網(wǎng)站備案等企業(yè)網(wǎng)站建設(shè)一條龍服務(wù).我們是一家持續(xù)穩(wěn)定運(yùn)營(yíng)了10多年的成都創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司。
數(shù)據(jù)持久化的方法:
1:NSKeyedArchiver-對(duì)象歸檔
2:NSUserDefaults
3:屬性列表化(NSArray,NSDictonary保存文件)
4:SQlite數(shù)據(jù)庫(kù),CoreData數(shù)據(jù)庫(kù)
歸檔的形式
1:對(duì)Foundation庫(kù)中對(duì)象進(jìn)行歸檔
2:自定義對(duì)象進(jìn)行規(guī)定(需要實(shí)現(xiàn)歸檔協(xié)議,NSCoding)
3:歸檔后的文件是加密的,屬性列表是明文的
實(shí)例
(一):使用數(shù)組為例,實(shí)現(xiàn)數(shù)組的歸檔和還原
主要用到一下兩個(gè)類(lèi):(NSKeyedArchiver與NSKeyedUnarchiver)的方法
(1):+ (BOOL)archiveRootObject:(id)rootObject toFile:(NSString *)path; //進(jìn)行把對(duì)象歸檔到文件當(dāng)中去
(2):+ (id)unarchiveObjectWithFile:(NSString *)path; //根據(jù)文件的路徑進(jìn)行還原內(nèi)容
看下面代碼:
#import
#importint main(int argc,constchar* argv[]){@autoreleasepool{NSArray*array=@[@"abc",@"123",@5678];NSString*homePath=NSHomeDirectory();NSString*srcPath=[homePath stringByAppendingPathComponent:@"/Desktop/array.archiver"]; BOOL success=[NSKeyedArchiver archiveRootObject:array toFile:srcPath];if(success){ NSLog(@"歸檔成功.");}//進(jìn)行還原NSArray*resultArray=[NSKeyedUnarchiver unarchiveObjectWithFile:srcPath];NSLog(@"%@",resultArray);}return0;}
自定義內(nèi)容歸檔:
歸檔:1:使用NSData實(shí)例作為歸檔的存儲(chǔ)數(shù)據(jù)
2:添加歸檔的內(nèi)容(設(shè)置key與value)
3:完成歸檔,把歸檔的數(shù)據(jù)存入到硬盤(pán)中
還原數(shù)據(jù):
1:從硬盤(pán)中讀取文件,生成NSData實(shí)例
2:根據(jù)Data實(shí)例進(jìn)行創(chuàng)建和初始化還原歸檔文件實(shí)例
3:還原文件,根據(jù)key去訪(fǎng)問(wèn)相應(yīng)的value值
實(shí)例:使用自定義數(shù)據(jù)類(lèi)型進(jìn)行歸檔并且還原數(shù)據(jù),看下實(shí)現(xiàn)代碼:
#importint main(int argc,constchar* argv[]){@autoreleasepool{//進(jìn)行自定義對(duì)象寫(xiě)入歸檔NSString*homePath=NSHomeDirectory();NSString*srcPath=[homePath stringByAppendingPathComponent:@"/Desktop/custom.archiver"];NSMutableData*data=[NSMutableData data];NSKeyedArchiver*archiver=[[NSKeyedArchiver alloc]initForWritingWithMutableData:data];[archiver encodeInt:100 forKey:@"key1"];NSArray*arrary=[NSArray arrayWithObjects:@"tom",@"jack", nil];[archiver encodeObject:arrary forKey:@"key2"];[archiver finishEncoding];[archiver release]; BOOL success=[data writeToFile:srcPath atomically:YES];if(success){ NSLog(@"寫(xiě)入成功...");} //進(jìn)行還原數(shù)據(jù)NSData*content=[NSData dataWithContentsOfFile:srcPath];NSKeyedUnarchiver*unarchiver=[[NSKeyedUnarchiver alloc]initForReadingWithData:content];NSUInteger result1=[unarchiver decodeIntForKey:@"key1"];NSArray*result2=[unarchiver decodeObjectForKey:@"key2"];NSLog(@"還原的數(shù)據(jù)為:");NSLog(@"key1= %ld ",result1);NSLog(@"key2= %@",result2);}return0;}