iOS基础--数据本地化-归解档-整理总结(2)
iOS数据持久化方法:
- 属性列表 (plist文件), 用 NSUserDefault
- 归档 (NSKeyedArchiver) (本质上还是WriteToFile 归解档是一种编码方式)
- 数据库 (SQlite, CoreData, FMDB(第三方));
- 归档: 将复杂对象转化成 NSData 类型对象数据 (复杂--> 归档 --> NSData --> writeToFile)
注意: 归档是将对象转化为数据字节,以文件的形式存在磁盘上. - 反归档(解档): 读取文件将 NSData 类型数据转化为复杂对象 (读取数据 --> NSData -->反归档 -- 复杂对象)
<big>归档的方式:</big>
1: 对Foundation框架中的对象进行归档
2: 对自定义的对象进行归档
3: 对自定义的内容进行归档
- 注意: 归档生成的文档是加密的不可解的
Foundation框架中对象:
归档:
// 1: 创建路径
NSString *DocumentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, 4) objectAtIndex:0];
NSString *filrPath = [DocumentsPath stringByAppendingString:@"/file.txt"];
// 2: 归档
NSArray *arr = @[@"iOS",@"UI",@"OC",@"C"];
BOOL result = [NSKeyedArchiver archiveRootObject:arr toFile:filrPath];
if (result)
{
NSLog(@"归档成功****%@",filrPath);
}
// 3: 不需要结束归档```
// 反归档:
NSArray newArr = [NSKeyedUnarchiver unarchiveObjectWithFile:filrPath];
NSLog(@"newArr**%@",newArr);```
自定义内容:
// 归档:
// 1: 获取路径
NSString *rootPath = NSHomeDirectory();
rootPath = [rootPath stringByAppendingString:@"/customFile.txt"];
// 2: 使用Data对象存放归档数据
NSMutableData *oldData = [NSMutableData data];
// 3: 创建归档工具
NSKeyedArchiver *aa = [[NSKeyedArchiver alloc] initForWritingWithMutableData:oldData];
// 4: 对自定义内容归档
[aa encodeObject:@"小皇帝詹姆斯" forKey:@"name"];
[aa encodeObject:@"闪电侠韦德" forKey:@"wife"];
[aa encodeObject:@[@"保罗",@"安东尼"] forKey:@"team"];
// 5: 完成归档
[aa finishEncoding];
// 6: 写入
if ([oldData writeToFile:rootPath atomically:1])
{
NSLog(@"成功******%@",rootPath);
}
//反归档
>```code
// 1: 读取文件 并转化成NSData类型
NSData *dataNew = [NSData dataWithContentsOfFile:rootPath];
// 2: 根据dataNew创建反归档对象
NSKeyedUnarchiver *bb = [[NSKeyedUnarchiver alloc] initForReadingWithData:dataNew];
// 3: 反归档
NSString *str1 = [bb decodeObjectForKey:@"name"];
NSString *str2 = [bb decodeObjectForKey:@"wife"];
NSArray *str3 = [bb decodeObjectForKey:@"team"];
NSLog(@"str1***%@***str*%@**str3*%@",str1,str2,str3);
// 4:不用写结束归档