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