
iOS的归档与解档
发布日期:2021-05-07 16:18:57
浏览次数:21
分类:技术文章
本文共 2094 字,大约阅读时间需要 6 分钟。
归档与解档也是iOS中对象保存与读取的一种方式,对系统的对象归档与解档比较容易,而对自定义类的对象就要继承协议。
1.系统对象的解档与归档
NSString *path = @"/Users/gph/Desktop/1.plist"; NSArray *array = [[NSArray alloc]initWithObjects:@"One",@"Two",@"Three", nil]; NSDictionary *dic = [[NSDictionary alloc]initWithObjectsAndKeys:@"One",@"1",@"Two",@"2",@"Three",@"3", nil]; //归档 NSMutableData *data = [[NSMutableData alloc]init]; NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data]; [archiver encodeObject:array forKey:@"array"]; [archiver encodeObject:dic forKey:@"dic"]; [archiver finishEncoding]; [data writeToFile:path atomically:YES]; //解档 NSData *data2 = [[NSData alloc]initWithContentsOfFile:path]; NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:data2]; NSDictionary *tmpDic = [unarchiver decodeObjectForKey:@"dic"]; NSArray *tmpArr = [unarchiver decodeObjectForKey:@"array"]; NSLog(@"%@",tmpArr); NSLog(@"%@",tmpDic);2.自定义类的对象解档与归档
一个完整的应用需要考虑方方面面,比如内存警告,比如转入后台,就要将对象进行保存。但对自定义类对象归档的步骤与前面类似,差别是先继承NSCoding协议,先定义一个UserItem类。UserItem.h文件如下
#importUserItem.m文件如下@interface UserItem : NSObject @property (nonatomic, copy) NSString* name;@end
@implementation UserItem//归档- (id)initWithCoder:(NSCoder *)aDecoder{ self.name = [aDecoder decodeObjectForKey:@"name"]; return self;}//解档- (void)encodeWithCoder:(NSCoder *)aCoder{ [aCoder encodeObject:self.name forKey:@"name"];}@end归档与解档代码:
UserItem* user = [[UserItem alloc] init]; user.name = @"独孤求败"; NSMutableData* data = [[NSMutableData alloc]init]; NSKeyedArchiver* archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; [archiver encodeObject:user forKey:@"user"]; [archiver finishEncoding]; //从data里面拿出对象 NSKeyedUnarchiver* unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; UserItem* user2 = [unarchiver decodeObjectForKey:@"user"]; [unarchiver finishDecoding]; NSLog(@"%@",user2.name);
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年04月06日 08时58分59秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
LeetCode - 98. 验证二叉搜索树(迭代、递归)2
2019-03-04
【△重点△】LeetCode - 4. 寻找两个正序数组的中位数——二分查找
2019-03-04
LeetCode - 5. 最长回文子串——字符串、动态规划
2019-03-04
【BFS】——LeetCode - 752. 打开转盘锁
2019-03-04
【快慢指针】——LeetCode - 287. 寻找重复数
2019-03-04
【数据结构系列】链表合并问题——链表的奇偶重排
2019-03-04
【Redis】Redis客户端实现的基本原理
2019-03-04
全局锁和表锁 :给表加个字段怎么有这么多阻碍?
2019-03-04
事务到底是隔离的还是不隔离的?
2019-03-04
SpringMVC的Model对象的使用
2019-03-04
文本读取和csv文件生成工具类的编写
2019-03-04
@Import注解---导入资源
2019-03-04
Leetcode 面试题 08.04. 幂集(DAY 103) ---- 回溯算法学习期
2019-03-04
重读&笔记系列-《Linux多线程服务端编程》第一章
2019-03-04
解决ubuntu在虚拟机(VMware)环境下不能联网的问题
2019-03-04
LeetCode - 字符串相乘
2019-03-04
C# 适配器模式
2019-03-04
二分查找与插入排序的结合使用
2019-03-04
892 三维形体的表面积(分析)
2019-03-04
40. 组合总和 II(dfs、set去重)
2019-03-04