歸檔:是對對象及其屬性還有同其餘對象間的關係進行編碼,造成一個文檔,該文檔既能夠保存於文件系統,也能夠在進程或網絡間傳送。
網絡
歸檔過程把對象圖保存爲一種與架構無關的字節流,保持對象的標識以及對象間的關係。架構
可以歸檔的對象必須遵照NSCoding協議,實現如下方法:編碼
- (void)encodeWithCoder:(NSCoder *)aCoder; - (id)initWithCoder:(NSCoder *)aDecoder;
使用NSCoder對象進行編碼與解碼操做。NSCoder自己是抽象類,實際運行中使用NSKeyedArchiver和NSKeyedUnarchiver這兩個具體類,也就是使用基於鍵的歸檔技術。
atom
Archiving:code
+ (BOOL)archiveRootObject:(id)rootObject toFile:(NSString *)path;
Unarchiving:
orm
+ (id)unarchiveObjectWithFile:(NSString *)path;
示例:對象
// // NimoPerson.h // TestDemo // // Created by fu zheng on 15/8/13. // Copyright (c) 2015年 FuZheng. All rights reserved. // #import <Foundation/Foundation.h> @interface NimoPerson : NSObject <NSCoding> @property (nonatomic, copy) NSString *name; @property (nonatomic, copy) NSString *gender; @property (nonatomic, assign) NSUInteger age; @property (nonatomic, retain) NSSet *friends; @property (nonatomic, getter = isMarried) BOOL married; @end
// // NimoPerson.m // TestDemo // // Created by fu zheng on 15/8/13. // Copyright (c) 2015年 FuZheng. All rights reserved. // #import "NimoPerson.h" @implementation NimoPerson - (void)encodeWithCoder:(NSCoder *)aCoder { [aCoder encodeObject:self.name forKey:@"name"]; [aCoder encodeObject:self.gender forKey:@"gender"]; [aCoder encodeInteger:self.age forKey:@"age"]; [aCoder encodeObject:self.friends forKey:@"friends"]; [aCoder encodeBool:[self isMarried] forKey:@"married"]; } - (id)initWithCoder:(NSCoder *)aDecoder { if (self = [super init]) { _name = [[aDecoder decodeObjectForKey:@"name"] copy]; _gender = [[aDecoder decodeObjectForKey:@"gender"] copy]; _age = [aDecoder decodeIntegerForKey:@"age"]; _friends = [aDecoder decodeObjectForKey:@"friends"]; _married = [aDecoder decodeBoolForKey:@"married"]; } return self; } - (id)init { NSSet *friends = [[NSSet alloc] initWithArray:@[@"Tom", @"Jessica", @"Lily"]]; return [self initWithName:@"Tony" gender:@"male" age:28 friends:friends married:NO]; } - (id)initWithName:(NSString *)name gender:(NSString *)gender age:(NSUInteger)age friends:(NSSet *)friends married:(BOOL)married { if (self = [super init]) { _name = [name copy]; _gender = [name copy]; _age = age; _friends = friends; _married = married; } return self; } - (NSString *)description { NSDictionary *desDic = @{@"name":_name, @"gender":_gender, @"age":[NSNumber numberWithInteger:_age], @"married":[NSNumber numberWithBool:_married]}; return [NSString stringWithFormat:@"%@", desDic]; } @end