基本數(shù)據(jù)持久化:把OC中的基本數(shù)據(jù)存儲(chǔ)到沙盒中同蜻。
歸檔:把復(fù)雜類型轉(zhuǎn)為data類型的過程。
解歸檔:把data類型轉(zhuǎn)為復(fù)雜類型的過程早处。
NSCoding
//======car.h========
#import <Foundation/Foundation.h>
@interface YTCar : NSObject <NSCoding>
//顏色
@property(nonatomic, copy) NSString * color;
//價(jià)格
@property(nonatomic, assign) double price;
@end
//========car.m==========
#import "YTCar.h"
@implementation YTCar
//將所有屬性歸檔
- (void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:_color forKey:@"color"];
[aCoder encodeDouble:_price forKey:@"price"];
}
//將所有屬性解歸檔
- (id)initWithCoder:(NSCoder *)aDecoder{
if (self = [super init]) {
_color = [aDecoder decodeObjectForKey:@"color"];
_price = [aDecoder decodeDoubleForKey:@"price"];
}
return self;
}
@end
#import <Foundation/Foundation.h>
@class YTCar;
@interface YTPerson : NSObject <NSCoding>
//姓名
@property(nonatomic, copy) NSString * name;
//車
@property(nonatomic, strong) YTCar * car;
@end
//=======preson.m========
#import "YTPerson.h"
#import "YTCar.h"
@implementation YTPerson
//將所有希望歸檔的屬性都?xì)w檔
- (void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:_name forKey:@"name"];
[aCoder encodeObject:_car forKey:@"car"];
}
//解歸檔
- (id)initWithCoder:(NSCoder *)aDecoder{
if (self = [super init]) {
_name = [aDecoder decodeObjectForKey:@"name"];
_car = [aDecoder decodeObjectForKey:@"car"];
}
return self;
}
@end
//=====main========
#import <Foundation/Foundation.h>
#import "YTPerson.h"
#import "YTCar.h"
#define PATH @"/Users/yuting/Desktop/授課/CD1601/OC階段/day5-歸檔和解歸檔/Person"
//如果需要?dú)w檔的對(duì)象的屬性中有另外一個(gè)類的對(duì)象湾蔓,讓兩個(gè)類都遵守NSCoding協(xié)議并且實(shí)現(xiàn)協(xié)議方法,去歸檔和解歸檔相應(yīng)的屬性砌梆。
int main(int argc, const char * argv[]) {
@autoreleasepool {
YTPerson * person = [[YTPerson alloc] init];
person.name = @"小明";
YTCar * bee = [[YTCar alloc] init];
bee.color = @"yellow";
bee.price = 50;
person.car = bee;
//歸檔
// [NSKeyedArchiver archiveRootObject:person toFile:PATH];
//解歸檔
YTPerson * p = [NSKeyedUnarchiver unarchiveObjectWithFile:PATH];
NSLog(@"%@ %@ %lf", p.name, p.car.color,p.car.price);
}
return 0;
}