• Archive(归档/反归档)


     1 #import "ViewController.h"
     2 #import "Person.h"
     3 @interface ViewController ()
     4 
     5 @end
     6 
     7 @implementation ViewController
     8 
     9 - (void)viewDidLoad {
    10     [super viewDidLoad];
    11     Person *p1 = [Person new];
    12     p1.name = @"Jackie Chan";
    13     p1.age = 16;
    14     //将复杂对象转为NSData,归档(序列化)
    15     NSData *p1Data = [NSKeyedArchiver archivedDataWithRootObject:p1];
    16     
    17     //创建路径,存储p1Data
    18     NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0] stringByAppendingPathComponent:@"person"];
    19     NSLog(@"%@",path);
    20     [p1Data writeToFile:path atomically:YES];
    21 
    22     //读取文件中的数据
    23     NSData *p2Data = [NSData dataWithContentsOfFile:path];
    24     Person *p2 = [NSKeyedUnarchiver unarchiveObjectWithData:p2Data];
    25     
    26     NSLog(@"%@,%ld",p2.name,p2.age);
    27     p2.name = @"Bruce Lee";
    28     p2.age = 18;
    29 
    30     //使用归档工具进行归档
    31     NSMutableData *mdata = [[NSMutableData alloc] init];
    32     NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:mdata];
    33     //进行归档
    34     [archiver encodeObject:p1 forKey:@"person1"];
    35     [archiver encodeObject:p2 forKey:@"person2"];
    36     //结束归档
    37     [archiver finishEncoding];
    38     NSLog(@"%@",mdata);
    39     //反归档
    40     //反归档工具
    41     NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:mdata];
    42     //进行反归档
    43     Person *p3 =  [unarchiver decodeObjectForKey:@"person1"];
    44     Person *p4 = [unarchiver decodeObjectForKey:@"person2"];
    45     NSLog(@"%@ %ld",p3.name,p3.age);
    46     NSLog(@"%@ %ld",p4.name,p4.age);
    47     //结束反归档
    48     [unarchiver finishDecoding];
    49 }
    1 #import <Foundation/Foundation.h>
    2 
    3 @interface Person : NSObject<NSCoding>
    4 @property(nonatomic,copy) NSString *name;
    5 @property (nonatomic,assign) NSInteger age;
    6 @end
     1 #import "Person.h"
     2 
     3 @implementation Person
     4 //归档(序列化) 协议方法,将属性转为二进制数据
     5 - (void)encodeWithCoder:(NSCoder *)aCoder
     6 {
     7     [aCoder encodeObject:self.name forKey:@"name"];
     8     [aCoder encodeInteger:self.age forKey:@"age"];
     9 }
    10 //反归档(反序列化)方法,将二进制数据恢复为属性
    11 - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder
    12 {
    13     self = [super init];
    14     if (self) {
    15         self.name = [aDecoder decodeObjectForKey:@"name"];
    16         self.age = [aDecoder decodeIntegerForKey:@"age"];
    17         
    18     }
    19     return self;
    20 }
    21 @end
  • 相关阅读:
    字符编码总结
    文件操作总结(2)
    Codeforces Round #432 (Div. 2, based on IndiaHacks Final Round 2017) C. Five Dimensional Points 暴力
    UVA 10048
    UVA 247
    UVA 1151
    UVA 1395
    Codeforces Round #260 (Div. 1) D. Serega and Fun 分块
    Codeforces Beta Round #13 E. Holes 分块
    Codeforces Round #404 (Div. 2) E. Anton and Permutation 分块
  • 原文地址:https://www.cnblogs.com/DevinSMR/p/5263701.html
Copyright © 2020-2023  润新知