Runtime 实现归档

在.h中

#import 
//pdf 基本设置的模型
@interface ScratchPDFSetModel : NSObject

//颜色
@property (nonatomic, assign) CGFloat R;
@property (nonatomic, assign) CGFloat G;
@property (nonatomic, assign) CGFloat B;
//字体大小
@property (nonatomic, assign) CGFloat font;
@end

在.m中


- (void)encodeWithCoder:(nonnull NSCoder *)aCoder {
  unsigned int count = 0;
//获取变量名
  Ivar *ivars = class_copyIvarList([self class], &count);
  for (NSInteger index = 0; index

这么做的好处是,不在需要每个属性都实现。如果一个模型的属性多的话,使用runtime的好处就大了。

//这里的attribute 换成你们自己的属性。我这里只是一个说明
- (void)encodeWithCoder:(nonnull NSCoder *)aCoder{
[aCoder encodeObject:self. attribute forKey: @"attribute"];
}
- (nullable instancetype)initWithCoder:(nonnull NSCoder *)aDecoder{
    if (self = [super init]) {
        self. attribute =  [aDecoder decodeObjectForKey:@"attribute"];
   }
    return self;
}

在外部使用:

    //归档
     ScratchPDFSetModel *model = [ScratchPDFSetModel new];
      model.R = 1;
      model.G = 0;
      model.B = 0;
      model.font = 10;
      [NSKeyedArchiver archiveRootObject:model toFile:filePath];
//解档
      NSString *filePath = [[ScratchPdfTool     shareInstance]createPDFSetPlist];
      ScratchPDFSetModel *setModel = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];

你可能感兴趣的:(Runtime 实现归档)