IOS歸解檔
阿新 • • 發佈:2019-01-23
原文連結:http://blog.csdn.net/richard_rufeng/article/details/17640551
歸檔也叫序列化,是將檔案存在硬碟,解檔是從硬碟還原
5種方式:
第一種、使用屬性列表進行歸檔
如果物件是NSString,NSDictionary,NSArray,NSData或者NSNumber,可以使用writeToFile:atomically方法將資料寫到檔案,注意這種方式是明文
sample:
[objc] view plaincopyprint?- NSArray *array = @[@"abc",@"123",@23.4];
-
if
- {
- NSLog(@"success");
- }
- NSArray *arr2=[NSArray arrayWithContentsOfFile:@"text.plist"];
- NSLog(@"%@",arr2);
第二、NSKeyedArchiver--物件歸檔,資料會加密
1、對於NSArray或者NSDictionary sample code:
[objc] view plaincopyprint?- /***歸檔物件****/
-
NSArray
- NSString *homePath = NSHomeDirectory();
- NSString *path = [homePath stringByAppendingPathComponent:@"test.arc"];
- // BOOL success = [NSKeyedArchiver archiveRootObject:array toFile:path];
- BOOL success=[NSKeyedArchiver archiveRootObject:array toFile:path];
-
if (success) {
- NSLog(@"archive success");
- }
- /***解歸檔****/
- NSArray *array2 =[NSKeyedUnarchiver unarchiveObjectWithFile:path];
- SLog(@"%@",array2);
結果:
success
2013-12-28 22:14:25.353 ArchiverDemo1[1206:303] (
abc,
123,
"23.4"
)
2、如果是其他型別的物件儲存到檔案,可以利用NSKeyedArchiver類建立帶鍵的檔案來完成
[objc] view plaincopyprint?- NSString *homePath = NSHomeDirectory();
- NSString *path = [homePath stringByAppendingPathComponent:@"archiver2.archiv"];
- NSMutableData *data = [NSMutableData data];
- NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
- NSArray *array = @[@"jack",@"tom"];
- [archiver encodeInt:100 forKey:@"age"];
- [archiver encodeObject:array forKey:@"names"];
- [archiver finishEncoding];
- [archiver release];
- BOOL success = [data writeToFile:path atomically:YES];
- if (success) {
- NSLog(@"archive success");
- }
- /***解歸檔物件**/
- NSData *data2 = [NSData dataWithContentsOfFile:path];
- NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data2];
- int age = [unArchiver decodeIntForKey:@"age"];
- NSArray *names = [unArchiver decodeObjectForKey:@"names"];
- [unArchiver release];
- NSLog(@"age=%d,names=%@",age,names);
對屬性編碼,歸檔的時候會呼叫
- (void)encodeWithCoder:(NSCoder *)aCoder
//對屬性解碼,解歸檔呼叫
- (id)initWithCoder:(NSCoder *)aDecoder
[objc] view plaincopyprint?- //對屬性編碼,歸檔的時候會呼叫
- - (void)encodeWithCoder:(NSCoder *)aCoder {
- [aCoder encodeInt:_age forKey:AGE];
- [aCoder encodeObject:_name forKey:NAME];
- [aCoder encodeObject:_email forKey:EMAIL];
- [aCoder encodeObject:_password forKey:PASSWORD];
- }
- //對屬性解碼,解歸檔呼叫
- - (id)initWithCoder:(NSCoder *)aDecoder {
- self = [super init];
- if (self != nil) {
- _age = [aDecoder decodeIntForKey:AGE];
- self.name = [aDecoder decodeObjectForKey:NAME];
- self.email = [aDecoder decodeObjectForKey:EMAIL];
- self.password = [aDecoder decodeObjectForKey:PASSWORD];
- }
- returnself;
- }
第三種:NSUserDefaults
sample code:
[objc] view plaincopyprint?- [[NSUserDefaults standardUserDefaults] setObject:authData forKey:@"SinaWeiboAuthData"];
- [[NSUserDefaults standardUserDefaults] synchronize];
第四種、SQlite資料庫、CoreData資料庫