美文网首页
iOS NSCoding / NSKeyed​Archiver

iOS NSCoding / NSKeyed​Archiver

作者: 再好一点点 | 来源:发表于2018-04-11 16:51 被阅读0次

一:要想使对象可以直接存储,首先要遵循NSCoding协议

@interface Person : NSObject

@property NSString *title;

@property NSString *author;

@property NSUInteger pageCount;

@property NSSet*categories;

@property (getter= isAvailable) BOOL available;

@end

@implementationPerson

- (id)initWithCoder:(NSCoder*)decoder {

    self= [super init];

    if(!self) {

        return nil;

    }

    self.title= [decoder decodeObjectForKey:@"title"];

    self.author= [decoder decodeObjectForKey:@"author"];

    self.pageCount= [decoder decodeIntegerForKey:@"pageCount"];

    self.categories= [decoder decodeObjectForKey:@"categories"];

    self.available= [decoder decodeBoolForKey:@"available"];

    return self;

}

- (void)encodeWithCoder:(NSCoder*)encoder {

    [encoder encodeObject:self.title forKey:@"title"];

    [encoder encodeObject:self.author forKey:@"author"];

    [encoder encodeInteger:self.pageCount forKey:@"pageCount"];

    [encoder encodeObject:self.categories forKey:@"categories"];

    [encoder encodeBool:[self isAvailable] forKey:@"available"];

}

创建需要archiver的对象

    Person *p = [[Person alloc] init];

    p.title = @"蒙奇 D 路飞";

    p.author=@"test1";

    p.pageCount=1;

    p.categories = [NSSet setWithObjects:@"a", @"b", nil];

    p.available=YES;

     NSString *home = NSHomeDirectory();

    home = [home stringByAppendingPathComponent:@"test.txt"];

    //存储数据

    BOOL res = [NSKeyedArchiver archiveRootObject:p toFile:home];

    //获取数据

    Persion *p1 = [NSKeyedUnarchiver unarchiveObjectWithFile:home];

    //存储数据

     NSData *data = [NSKeyedArchiver archivedDataWithRootObject:p];

    [[NSUserDefaults standardUserDefaults] setObject:data forKey:@"person"];

    //获取数据

    NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:@"person"];

    Person *person = [NSKeyedUnarchiver unarchiveObjectWithData:data];

二:对象具有copy功能

person.h,person.m如下

@interface Person : NSObject<NSCopying>

@property (nonatomic, assign) NSInteger age;

@property (nonatomic, copy) NSString *name;

@end

@implementation Person

- (id)copyWithZone:(NSZone*)zone {

    Person *person = [[[self class] allocWithZone:zone] init];

    person.age = self.age;

    person.name = self.name;

    return person;

}

@end

控制器里边测试如下:

   Person *person = [[Person alloc]init]; 

    person.age = 10;

    person.name = @"name"; 

    Person*person1 = [person copy];

    person1.age=11;

    person1.name=@"name1";

    NSLog(@"person.age==%ld", person.age);//person.age==10

    NSLog(@"person.name==%@", person.name);//person.name==name

    NSLog(@"person1.age==%ld", person1.age);//person1.age==11

    NSLog(@"person1.name==%@", person1.name);//person1.name==name1

相关文章

  • iOS NSCoding / NSKeyed​Archiver

    一:要想使对象可以直接存储,首先要遵循NSCoding协议 @interface Person : NSObjec...

  • 关于 NSCoding 和 NSKeyed​Archiver |

    我们在开发应用的时候,经常会进行一些简单数据的存储,比如应用的一些配置信息。关于数据的存储就会用到 NSCodin...

  • iOS开发-----Userdefault 真的安全?

    NSuserdefaults 是一种IOS常用的数据持久化的方式,操作简便,配合NSCoding 和NSKeyed...

  • 数据

    1.归档:把对象转成 NSData 唯一方式 NSCoding 协议 NSData*data = [NSKeyed...

  • 关于swift下归档解档遇到的坑

    单个对象归档,对使用nscoding,nskeyed..理解更深刻了 列子 在使用对对象数组归档解档 要特别小心 ...

  • 知识小结三:NSCoding理解

    iOS - NSCoding协议的理解 NSCoding协议 一、NSCoding理解 NSCoder的具体子类使...

  • 2021-08-25

    iOS swift SDK详解之NSCoding协议 详解:NSCoding是对iOS中的Model类进行编码和解...

  • iOS数据持久化

    ** iOS下数据持久化常用的几种方式:** NSUserDefaults plist(属性列表) NSKeyed...

  • iOS数据存储

    iOS数据存储方式 Preference(偏好设置) 写入式(plist(XML属性列表归档)); NSKeyed...

  • iOS NSCoding 与 NSSecureCoding

    NSCoding 简介NSCoding是把数据存储在iOS和Mac OS上的一种极其简单和方便的方式,它把模型对象...

网友评论

      本文标题:iOS NSCoding / NSKeyed​Archiver

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