随笔 - 65  文章 - 0  评论 - 21  阅读 - 32万

【深入学习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

 

posted on   Anthony Li  阅读(1810)  评论(0编辑  收藏  举报
编辑推荐:
· 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,谁才是开发者新宠?
< 2013年5月 >
28 29 30 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 1
2 3 4 5 6 7 8

博客园博客已停止更新,博客地址:dyinigbleed.com

点击右上角即可分享
微信分享提示