【深入学习iOS开发(五)】Archive(归档)
Archive(归档)
Archives provide a means to convert objects and values into an architecture-independent stream of bytes that preserves the identity of and the relationships between the objects and values.
1、归档与解档
Archive
RootObject
[NSKeyedArchiver archiveRootObject:[contentTextField text] toFile:[self archiveFilePath]];
Keyed
NSString *content = [contentTextField text]; NSMutableData *data = [NSMutableData data]; NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; [archiver encodeObject:content forKey:@"content"]; [archiver finishEncoding]; [data writeToFile:[self archiveFilePath] atomically:YES];
Unarchive
Root Object
[contentLabel setText:[NSKeyedUnarchiver unarchiveObjectWithFile:[self archiveFilePath]]];
Keyed
NSData *data = [NSData dataWithContentsOfFile:[self archiveFilePath]]; NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; [contentLabel setText:[unarchiver decodeObjectForKey:@"content"]]; [unarchiver finishDecoding];
2、NSCoding Protocol
为了支持编码(encoding)和解码(decoding),类需要实现NSCoding Protocol。
以类Person为例:
Person.h
#import <Foundation/Foundation.h> #define PERSON_KEY_FIRSTNAME @"FIRSTNAME" #define PERSON_KEY_LASTNAME @"LASTNAME" #define PERSON_KEY_HEIGHT @"HEIGHT" @interface Person : NSObject <NSCoding> @property (nonatomic, retain) NSString *firstName; @property (nonatomic, retain) NSString *lastName; @property (nonatomic, assign) float height; @end
Person.m
#import "Person.h" @implementation Person @synthesize firstName, lastName, height; - (void)encodeWithCoder:(NSCoder *)aCoder { [aCoder encodeObject:self.firstName forKey:PERSON_KEY_FIRSTNAME]; [aCoder encodeObject:self.lastName forKey:PERSON_KEY_LASTNAME]; [aCoder encodeFloat:self.height forKey:PERSON_KEY_HEIGHT]; } - (id)initWithCoder:(NSCoder *)aDecoder { self = [super init]; if (self != nil) { self.firstName = [aDecoder decodeObjectForKey:PERSON_KEY_FIRSTNAME]; self.lastName = [aDecoder decodeObjectForKey:PERSON_KEY_LASTNAME]; self.height = [aDecoder decodeFloatForKey:PERSON_KEY_HEIGHT]; } return self; } @end
参考:https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Archiving/Archiving.html
Android 开发讨论群:84778336
iOS 开发讨论群:82873648

本作品采用知识共享署名-非商业性使用 3.0 许可协议进行许可。
转载请署名李震(博客地址:http://www.cnblogs.com/dyingbleed/),且不得用于商业目的。
博客园博客已停止更新,博客地址:dyingbleed.com
iOS 开发讨论群:82873648

本作品采用知识共享署名-非商业性使用 3.0 许可协议进行许可。
转载请署名李震(博客地址:http://www.cnblogs.com/dyingbleed/),且不得用于商业目的。
博客园博客已停止更新,博客地址:dyingbleed.com
分类:
iOS
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?