归档也叫序列化,是将文件存在硬盘,解码是从硬盘还原
一、使用属性列表进行归档 如果对象是NSString,NSDictionary,NSArray,NSData,NSNumber,NSDate,可以是使用writeToFile:atomically方法将数据写到文件,注意这种方式是明文。 NSArray *inputArray = [NSArray arrayWithObjects:@“abc”, @“123”, @“qiaohaibin”]; //写入文件 当前目录下test.plist //一般写入都是写入沙盒Documents下 BOOL result = [inputArray writeToFile:@“test.plist” atomically:YES]; if(!result){ NSLog(@“fail to write to file”); } //读出文件 NSArray *outputArray = [NSArray arrayWithContentsOfFile:@“test.plist”]; NSLog(@“%@“, outputArray);二、使用NSKeyedArchiver和NSkeyedUnarchiver进行归档和解档。 //文件完整路径 NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSString *fileName = [filePath stringByAppendingPathComponent:@“test.archive"]; 1.对上面所说的类和基本数据进行归档和解档 //归档 NSMutableData *inputData = [NSMutableData data]; NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:inputData]; [archiver encodeObject:[NSArray arrayWithObject:@“qiaohaibin”] forKey:@“array”]; [archiver encodeInt:24 forKey:@“age”]; [archiver finishEncoding]; BOOL result = [inputData writeToFile:fileName atomically:YES]; if(!result){ NSLog(@“fail to archive to file”); } //解档 NSData *outputData = [NSMutaleData data]; NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:outputData]; NSArray *array = [unarchiver decodeObjectForKey:@“array”]; int age = [unarchiver decodeIntForKey:@“age”]; 2.自定义对象进行归档和解档(需要事项NSCoding协议) //归档时调用 - (void)encodeWithCoder:(NSCoder *)aCoder{ [aCoder encodeInt:_age forKey:@“AGE”]; [aCoder encodeObject:_username forKey:@“USERNAME”]; }//解档时调用
- (id)initWithCoder:(NSCoder *)aDecoder{ self.age = [aDecoder decodeObjectForKey:@“AGE”]; self.username = [aDecoder decodeObjectForKey:@“USERNAME”]; }