美文网首页
ios 归档与解档

ios 归档与解档

作者: xiong_xin | 来源:发表于2019-04-28 10:59 被阅读0次

将对象进行归档或者解档时,需要遵循NSCoding协议,对象必须实现encodeWithCoder方法和initWithcoder方法用于对象的编码和解码。遵循NSCoding的协议可以被序列化和反序列化

一、 在需要归档的类中遵循归档协议(NSCoding)
@interface Program : NSObject<NSCoding>
//需要归档的属性
@property (nonatomic, strong) NSString *name;
@property (nonatomic, assign) NSInteger age;
@end
二、在归档对象的.m方法中实现NSCoding的协议方法
//方法一:普通方式实现
- (void)encodeWithCoder:(NSCoder *)aCoder
{
    //告诉系统归档的属性是哪些
    [aCoder encodeObject:self.name forKey:@"name"];
    [aCoder encodeInteger:self.age forKey:@"age"];
}

- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
    self = [super init];
    if (self) {
        //解档
        self.name = [aDecoder decodeObjectForKey:@"name"];
        self.age = [aDecoder decodeIntegerForKey:@"age"];
    }
    return self;
}
//方法二:使用runtime方式实现
...之后补充
三、在Controller中实现具体的存取操作
- (IBAction)save:(UIButton *)sender {
    Person *person = [[Person alloc] init];
    person.name = @"Frank";
    person.age = 18;
    
    //这里以temp路径为例,存到temp路径下
    NSString *temp = NSTemporaryDirectory();
    NSString *filePath = [temp stringByAppendingPathComponent:@"obj.data"]; //注:保存文件的扩展名可以任意取,不影响。
    NSLog(@"%@", filePath);
    //归档
    [NSKeyedArchiver archiveRootObject:person toFile:filePath];
}

- (IBAction)read:(UIButton *)sender {
    //取出归档的文件再解档
    NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"obj.data"];
    //解档
    Person *person = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
    NSLog(@"name = %@, age = %ld",person.name,person.age);
}

优点:可以创建自己想要的数据模型,然后统一以模型方式存储。比属性列表过分依赖key要省心

缺点:归档的形式保存数据,只能一次性归档保存和一次性解压,只能针对少量数据,并且对数据处理比较笨拙。即如果想要改动数据的一小部分,还需要解压整个数据或者归档整个数据,没有属性列表速度快(NSUserDefault)https://www.jianshu.com/p/d24dd98bc9dc
,因为他每次都要把数据保存到闪存中。

相关文章

  • ios中Swift的归档与解档

    ios中Swift的归档与解档 归档 解档 init()方法 设置属性

  • ios 归档与解档

    将对象进行归档或者解档时,需要遵循NSCoding协议,对象必须实现encodeWithCoder方法和initW...

  • 浅谈iOS本地存储

    iOS本地存储方式有很多种,比如:NSUserDefault,Plist文件存储,CoreData,解档与归档,沙...

  • runTime

    iOS runtime讲解,并且用runtime动态归档与解档 (2015-09-30 22:42:02)转载▼ ...

  • iOS归档解档

    归档与解档是iOS中序列化与反序列化的方式,需要实现 encodeWithCoder 和 initWithCode...

  • 归档与解档

    归档:将对象按照一定的格式保存到文件中;解档:从文件中还原对象的过程 官方类的归档与解档方式一: 官方类的归档与解...

  • iOS---归档与解档

    /*iOS归档小结:1.归档实际上就是一种文件保存的形式,几乎所有的对象都能够被归档存储。它使用NSKeyedAr...

  • iOS归档(转)

    按下home后使用归档保存model数据,返回应用后解档恢复 iOS archive(归档)的总结 - 苹果吧 -...

  • 归档解档

    归档 解档

  • iOS 13归档解档

    归档解档的使用 自定义类对象要进行归档,那么这个对象的属性所属的类必须要遵守归档协议NSCoding必须在需要归档...

网友评论

      本文标题:ios 归档与解档

      本文链接:https://www.haomeiwen.com/subject/ykiwgqtx.html