iOS学习 --- iOS12对象序列化(NSKeyedArchiver/NSKeyedUnarchiver)
admin
2024-03-09 09:44:20
0

NSKeyedArchiver 归档

所谓的归档,就是将数据写到一个文件里面去。一般我们的应用的变量常量之类的数据都是在内存里面的,只要APP关闭,这些数据都会丢失。但是把数据存储到文件里面去,就能将数据保存到本地磁盘里面(目前iOS基本就是在沙盒里面操作了),不管是APP关闭还是重启设备,下次启动APP的时候都能够读出来。

NSKeyedUnarchiver解档

  • 所谓解档(别人也叫反归档),就是将数据从文件里面读取出来。在程序里面使用。

iOS12之前

归档

+ (NSData *)archivedDataWithRootObject:(id)rootObject API_DEPRECATED("Use +archivedDataWithRootObject:requiringSecureCoding:error: instead", macosx(10.2,10.14), ios(2.0,12.0), watchos(2.0,5.0), tvos(9.0,12.0));
NSMutableArray *array = [NSMutableArray array];for (ServiceModel *model in self.selectedArray) {NSData *data = [NSKeyedArchiver archivedDataWithRootObject:model];[array addObject:data];}[kUserDefaults setObject:array forKey:keySelectedArray];[kUserDefaults synchronize];

解档

+ (nullable id)unarchiveObjectWithData:(NSData *)data API_DEPRECATED("Use +unarchivedObjectOfClass:fromData:error: instead", macosx(10.2,10.14), ios(2.0,12.0), watchos(2.0,5.0), tvos(9.0,12.0));
NSMutableArray *localArray = [NSMutableArray array];
//获取array	
NSArray *array = [[NSUserDefaults standardUserDefaults] objectForKey:keySelectedArray];for (NSData *data in array) {//解码ServiceModel*model = [NSKeyedUnarchiver unarchiveObjectWithData:data];[localArray addObject:model];
}

iOS12之后

归档

+ (nullable NSData *)archivedDataWithRootObject:(id)object requiringSecureCoding:(BOOL)requiresSecureCoding error:(NSError **)error API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0));
NSMutableArray *array = [NSMutableArray array];for (TCMeServiceModel *model in selectedArray) {NSData *data = [NSKeyedArchiver archivedDataWithRootObject:model requiringSecureCoding:YES error:nil];[array addObject:data];}[kUserDefaults setObject:array forKey:keySelectedArray];[kUserDefaults synchronize];

解档

+ (nullable id)unarchivedObjectOfClasses:(NSSet *)classes fromData:(NSData *)data error:(NSError **)error API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0));
NSMutableArray *localArray = [NSMutableArray array];//获取arrayNSArray *array = [[NSUserDefaults standardUserDefaults] objectForKey:keySelectedArray];for (NSData *data in array) {//解码NSSet *classSet = [NSSet setWithObjects:[ServiceModel class],[NSString class], nil];ServiceModel*model = [NSKeyedUnarchiver unarchivedObjectOfClasses:classSet fromData:data error:nil];if (model) {[localArray addObject:model];}}

model

#import NS_ASSUME_NONNULL_BEGIN
@interface ServiceModel : NSObject//NSCopying,NSSecureCoding
/** image */
@property (nonatomic, copy) NSString *image;
/** title */
@property (nonatomic, copy) NSString *title;
/** vc */
@property (nonatomic, copy) NSString *vc;-(instancetype)initWithDict:(NSDictionary *)dict;
+(instancetype)resultListWithDict:(NSDictionary *)dict;@endNS_ASSUME_NONNULL_END
#import "ServiceModel.h"@implementation ServiceModel-(instancetype)initWithDict:(NSDictionary *)dict{self = [super init];if (self) {[self setValuesForKeysWithDictionary:dict];}return self;
}+(instancetype)resultListWithDict:(NSDictionary *)dict{	return [[self alloc]initWithDict:dict];
}+ (BOOL)supportsSecureCoding {return YES;
}//归档
- (void)encodeWithCoder:(nonnull NSCoder *)aCoder {[aCoder encodeObject:_image forKey:@"image"];[aCoder encodeObject:_title forKey:@"title"];[aCoder encodeObject:_vc forKey:@"vc"];
}//解档
- (nullable instancetype)initWithCoder:(nonnull NSCoder *)aDecoder {self = [super init];if (self) {_image = [aDecoder decodeObjectForKey:@"image"];_title = [aDecoder decodeObjectForKey:@"title"];_vc = [aDecoder   decodeObjectForKey:@"vc"];}return self;
}@end

归档存储的是数组,数组中嵌套的是model对象:

另:归档存储的是数组嵌套模型的时候:

①、model对象中要遵循NSSecureCoding协议;

②、model对象.m类中,要实现+ (BOOL)supportsSecureCoding方法,并返回真。

相关文章

iOS - iOS 12 之后的归档(NSKeyedArchiver)、解档(NSKeyedUnarchiver)用法

​​​​​​​ iOS 12对象序列化(NSKeyedArchiver)

iOS应用存储数据的常用的方式之plist和归档​​​​​​​

相关内容

热门资讯

广州房贷“减负”:多家银行“商... 每经记者|陈荣浩 每经编辑|黄胜 5月26日,广州住房公积金管理中心发布《广州商业性个人住房贷款转...
2026年北京高端家庭服务市场... 引言 步入2026年,北京家庭服务市场正经历从“劳动力密集型”向“专业能力驱动型”的深刻变革。随着高...
亚马逊员工刷AI数据致算力成本... 亚马逊近日关闭了一项内部AI使用量排行榜。此前员工为冲排名、刻意刷高AI调用量,导致公司算力成本激增...
聚势AI向新 深圳加速构建产融... 上证报中国证券网讯(记者 徐潇潇)5月28日,记者在2026年第四届香蜜湖财富管理论坛了解到,本届论...
阿里语音大模型登顶Speech... 【太平洋科技快讯】据报道,在全球权威AI评测平台Artificial Analysis的Speech...
AI产业保险落地,真就利好赛道... 本篇为大家准备了5条要闻,都是近期大家关注度比较高的内容,看完能理清近期的产业和市场动向。一、要闻导...
智象未来CEO:多模态模型To... 【CNMO科技消息】5月28日,据36氪报道,智象未来CEO梅涛称:智象未来做的是全球唯三、能够达到...
原创 人... 国家统计局2026年1月19日交出了一份让人心情复杂的成绩单。2025年全年出生人口792万人,人口...
咽东西总觉得有个坎儿?半个月还... 很多人都有过这样的经历:吃饭时,感觉食物经过胸口某个地方“顿了一下”或“卡了一下”,好像被什么挡住似...
原创 A... A股市场正上演一场冰与火之歌。 一边是通信、电子等科技板块高歌猛进,另一边是消费、金融等传统行业持续...
原创 5... 2026年5月28日,国内黄金价格继续走低,现货黄金跌至每克986元,中国黄金的基础金价报985.7...
抖音生活服务开放日:打造所见即... 5月27日,抖音生活服务举办“2026年服务体验与治理开放日”活动,分享平台在消费者权益保护与体验提...
原创 珀... “双向奔赴”的效果,拭目以待。 作者 | 方璐 编辑丨于婞 来源 | 野马财经 “618”年中大促的...
创投圈“围抢项目”白热化:“上... 记者 老盈盈 只是经过短短5个月,周政宁所在的慧科科创投资于2025年12月底初次接触的一家具身智能...
原创 5... 长鑫科技,这家名字听着有点陌生的公司,2026年一季度每天净赚2.75亿元,全年利润预计超千亿。 上...
首度失守200日牛熊分界线,黄... 这轮黄金的下跌,处处透露着不寻常。 从昨晚开始,市场就已经出现了明显异动。油价在跌,黄金居然也在跌,...
阿维塔招股书失效,上市日期将推... 据港交所官网披露,阿维塔科技(重庆)股份有限公司(以下简称“阿维塔”)的招股书已经失效。按照港交所规...
黄仁勋,入职清华! 来源:市场资讯 (来源:新智元) 新智元报道 【新智元导读】英伟达 CEO 黄仁勋即将加入清华大学...
新质策源导刊丨朱钧宇:低空经济... 朱钧宇 ——访赛迪研究院产业政策研究所研究室主任朱钧宇 图片来源/摄图网授权 ■中国经济时报记者 ...