- 아카이빙이란? 데이터를 저장하고, 불러올 수 있는 메카니즘을 의미한다.
- 아카이빙 메커니즘에 대한 그림은 아래와 같다.
- 아카이빙에서는 아카이버를 이용하여 데이터를 저장하고, 언 아카이버를 이용하여 저장한 데이터를 불러온다.
- iOS용 파운데이션
- 아카이버 : NSKeyedArchiver
- 언 아카이버 : NSKeyedUnarchiver
- 아카이빙을 사용하기 위해서는 우선 NSCoding 프로토콜에 대해서 알아야한다.
- NSCoding 프로토콜
- 객체를 저장하고, 불러올 수 있는 encoding/decoding 메소드를 제공한다.
- 구성은 아래와 같다.NSCoding 프로토콜
@protocol NSCoding
-(void)encodeWithCoder:(NSCoder *)aEncoder;
-(id)initWithCoder:(NSCoder *)aDecoder;
@end - NSCoder를 클래스에서 인코딩 시에 키-값 형태로 저장한다.NSCoding 프로토콜 채택 후 구현
// encoding
-(void)encodeWithCoder:(NSCoder *)aEncoder {
[aEncoder encodeInt:10 forKey:@"TEST"];
}
// decoding
-(id) initWithCoder:(NSCoder *) aDecoder {
self = [super init];
if(self) {
int value = [aDecoder decodeIntForKey:@"TEST"];
}
return self;
} - NSCoding 프로토콜로 정의된 객체에 아카이빙을 이용하여 파일로 저장하거나 NSData로 저장 후에 다시 불러올 수 있다.
- 파일로 저장 후 불러오기아카이빙을 파일을 이용
// 파일에 저장
ClassName *obj = [[ClassName alloc] init];
// 객체 값 설정
NSString *filePath = @"파일경로";
[NSKeyedArchiver archiverRootObject:obj toFile:filePath];
// 파일로 저장하면서 자동으로 인코딩 메소드 동작
// 파일에 저장된 내용 불러오기
ClassName *obj2 = [NSKeyedUnarchiver unarchiverObjectWithFile:filePath];
// 파일에서 읽어오면서 자동으로 디코딩 코드 동작 - NSData를 이용하여 저장 후 불러오기아카이빙을 NSData를 이용
// NSMutableData에 저장
NSMutableData *mdata = [NSMutableData data];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:mdata];
// 데이터 인코딩
[archiver encodingObject:@"ClassName" forKey:@"STRING"];
// 인코딩 마무리
[archiver finishEncoding];
// NSMutableData에 저장된 내용 불러오기
NSKeyedUnarchiber *unarchibver = [[NSKeyedUnarchiver alloc] initForReadingWithData:mdata];
// 데이터 디코딩
NSString *str = [unarchiver decodingObjectForKey:@"STRING"];
- 아래는 NSData를 이용한 데이터 저장 및 불러오기를 구현한 소스이다.
- 위의 소스 코드를 실행하면 아래와 같은 결과를 얻을 수 있다.