직렬화(Serialization): OOP언어에서 특정 클래스 오브젝트를 파일로 저장하거나 파일에서 읽어들일 때 특수하게 가공하는 것을 의미. Objective-c나 Swift에서는 이부분은 Encode, Decode 용어를 사용
Encode: 직렬화(Serialize) 한다
Decode: 직렬화된 데이터를 오브젝트로 풀어내는 것(deserialization)을 의미
직렬화에서도 KVC(Key-Value Coding) 개념 사용됨 - property와 key 연결
NSCoder
- byte stream을 추상화한 것
- 데이터를 Coder로 쓰거나 Coder에서 데이터를 읽어 올 수 있음.
(Coder - NSData 클래스에서 생성한 객체) - NSKeyedUnarchiver, NSKeyedArchiver를 사용하여 데이터 기록
(NSCoder는 추상 클래스)
NSCoding protocol
- (id)initWithCoder:(NSCoder *)coder; // 직렬화된 데이터에서 Object를 만들어 낼 때 호출
- (void)encodeWithCoder:(NSCoder *)coder; // 직렬화할 때 자동 호출
NSKeyArchiver
// Swift
let data = NSKeyedArchiver.archivedDataWithRootObject(object)
NSUserDefaults.standardUserDefaults().setObject(data, forKey: "object-key")
// Objective-c
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:object];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"object-key"];
NSKeyedUnarchiver
// Swift
if let data: NSData = NSUserDefaults.standardUserDefaults().objectForKey("object-key") as? NSData {
let object: SomePersonClass = NSKeyedUnarchiver.unarchiveObjectWithData(data) as SomePersonClass
}
// Objective-C
NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:@"object-key"];
SomePersonClass *object = [NSKeyedUnarchiver.unarchiveObjectWithData:data];
NSUserDefaults
- 파일 시스템에 초기 기본 설정과의 차이점을 User default database에 저장함
- 프리미티브 타입이 아닌 객체를 저장하고 싶으면 위의 NSCoding protocol을 적용하여 저장함.
+ (NSUserDefaults *)standardUserDefaults // 공유된 기본설정 객체
- (void)registerDefaults:(NSDictionary *)dictionary // 초기 기본설정 등록
// 설정을 바꾸는 메소드
- (void)setBool:(BOOL)value forKey:(NSString *)defaultName
- (void)setFloat:(float)value forKey:(NSString *)defaultName
- (void)setInteger:(NSInteger)value forKey:(NSString *)defaultName
- (void)setObject:(id)value forKey:(NSString *)defaultName
- (BOOL)boolForKey:(NSString *)defaultName
- (float)floatForKey:(NSString *)defaultName
- (NSInteger)intgerForKey:(NSString *)defaultName
- (id)objectForKey:(NSString *)defaultName
- (void)removeObjectForKey:(NSString *)defaultName
Ref. http://seorenn.blogspot.com/2014/11/swiftobjective-c-serialization.html
'iOS > iOS 기본기' 카테고리의 다른 글
[iOS] UIKit framework 계층도 (1) | 2019.11.25 |
---|---|
[iOS] NSCopying protocol (0) | 2019.11.25 |
[iOS] KVC(Key-value coding) / KVO(key-value observing) (0) | 2019.11.24 |
[iOS] Helper object / Delegate 동작 방식 / Protocol (0) | 2019.11.24 |
[iOS] AppKit Framework - UIControl, target-action (0) | 2019.11.24 |