博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 归档 解档使用总结
阅读量:6680 次
发布时间:2019-06-25

本文共 3141 字,大约阅读时间需要 10 分钟。

hot3.png

  • 1.比较 

    在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径;

    NSUserDefaults 偏好设置(将所有的东西都保存在同一个文件夹下面,且主要用于存储应用的设置信息)

    归档:因为前两者都有一个致命的缺陷,只能存储常用的类型。归档可以实现把自定义的对象存放在文件中。

  • 2.归档的使用

     Archiving: 归档(写 NSKeyedArchiver )/解档(读NSKeyedUnarchiver): 从内存写到沙盒文件   从沙盒读取到内存中

前提:必须遵守 NSCoding协议才可以归档方式

1.适用场景 :

   a。支持基本数据类型

   b。自定义类型(比如实例变量、xib也默默的归档)

归档 5步骤,解档 4步骤

a.对基本类型的归档

- (NSString *)archivingFilePath {    if (!_archivingFilePath) {        NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];        _archivingFilePath = [documentsPath stringByAppendingPathComponent:@"archiving"];    }    return _archivingFilePath;}- (IBAction)writeNSArrayByArchiving:(id)sender {    //准备数据    NSArray *array = @[@"name", @"age"];    NSArray *stuArray = @[@"Jonny", @19, @[@"Objective-C", @"Ruby"]];    //1.准备存储归档数据的可变数据类型    NSMutableData *mutableData = [NSMutableData data];    NSLog(@"归档前数据长度:%lu", (unsigned long)mutableData.length);    //2.创建NSKeyedArchiver对象 写到mutableData里面    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:mutableData];    //3.对要归档的数据进行编码操作(二进制)    [archiver encodeObject:array forKey:@"firstArray"];    [archiver encodeObject:stuArray forKey:@"secondArray"];    //4.完成编码操作    [archiver finishEncoding];    NSLog(@"归档之后的数据长度:%lu", (unsigned long)mutableData.length);    //5.将编码后的数据写到文件中    [mutableData writeToFile:self.archivingFilePath atomically:YES];   }- (IBAction)readDataByUnarchiving:(id)sender {    //1.从文件中读取数据(NSData)    NSData *data = [NSData dataWithContentsOfFile:self.archivingFilePath];    //2.创建NSKeyedUnarchiver对象 读取Data    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];    //3.对数据进行解码操作    NSArray *firstArray = [unarchiver decodeObjectForKey:@"firstArray"];    NSArray *secondArray = [unarchiver decodeObjectForKey:@"secondArray"];    //4.完成解码操作    [unarchiver finishDecoding];    //验证    NSLog(@"firstArray:%@; secondArray:%@", firstArray, secondArray);}

2.对自定义类型的归档

- (void)viewDidLoad {    [super viewDidLoad];//将自定义的类对象进行归档 (写)    //1.可变数据    NSMutableData* data = [[NSMutableData alloc]init];    //2.归档对象    Person* person = [[Person alloc]initWithName:@"Jackey" age:@20];    //3.编码    NSKeyedArchiver* archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];    [archiver encodeObject:person forKey:@"person"];//    4.编码结束    [archiver finishEncoding];//    5.写入文件    NSString* docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;    NSString* filePath = [docPath stringByAppendingPathComponent:@"archiving"];    [data writeToFile:filePath atomically:YES];    //    将自定义的类对象进行解档 (读)    //1.从文件中读取到数据(NSData)    NSData*  readData = [NSData dataWithContentsOfFile:filePath];    //2.创建NSKeyedUnarchiver对象    NSKeyedUnarchiver* unarchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:readData];    //3.对数据进行解码操作    Person* p =  [unarchiver decodeObjectForKey:@"person"];    //4.完成解码操作    [unarchiver finishDecoding];    NSLog(@"person name:%@ --- age:%@",p.name,p.age);   }

转载于:https://my.oschina.net/AngusTing/blog/617592

你可能感兴趣的文章
linux下使用lftp的小结
查看>>
面试敲门砖
查看>>
python将日志导入数据库代码案例2
查看>>
ORA-12705: Cannot access NLS data files or invalid environment specified
查看>>
用 Python 脚本实现对 Linux 服务器的监控
查看>>
windows主机安装zabbix-agent
查看>>
VirtualEnv 和Pip 构建Python的虚拟工作环境
查看>>
NetScaler的部署实验之四更新DDC的SSL证书配置及NetScaler对DDC的负载均衡配置
查看>>
cisco数据中心理论小记-3
查看>>
安装及配置php并发布phpmyadmin网站
查看>>
一个会展论坛进行的全息营销“策划” -王甲佳全息营销系列08
查看>>
JQuery选择器——子元素筛选选择器和表单元素选择器
查看>>
zabbix调试报错汇总
查看>>
在Nginx中部署基于IP的虚拟主机
查看>>
uml绘制类图
查看>>
nginx的location优先级
查看>>
晕,CCNP升级了
查看>>
克隆虚拟机
查看>>
开启关闭windows的匿名共享
查看>>
替代Linux下的rm命令
查看>>