<NSCoding>和<NSCopy>

1.<NSCoding>  存储一个model

ProductModel* productModel=[[ProductModelalloc]init];

productModel.title=@"小黄人自行车";

productModel.image=@"xx";

//立马崩溃只能存储对象

// [[NSUserDefaults standardUserDefaults] setObject:productModel forKey:@"STORE_PRODUCT"];

//如果没有实现encoding也会崩溃,会提示没有实现encodeWithCoder

NSData*data=[NSKeyedArchiverarchivedDataWithRootObject:productModel];

[[NSUserDefaultsstandardUserDefaults]setObject:dataforKey:@"STORE_PRODUCT"];

NSData*unData = [[NSUserDefaultsstandardUserDefaults]objectForKey:@"STORE_PRODUCT"];

ProductModel* unProductModel=[NSKeyedUnarchiverunarchiveObjectWithData:unData];

NSLog(@"title:%@",unProductModel.title);


- (nullableinstancetype)initWithCoder:(NSCoder*)aDecoder

{

self= [superinit];

if(self)

{

self.title= [aDecoderdecodeObjectForKey:@"title"];

self.image=[aDecoderdecodeObjectForKey:@"image"];

}

returnself;

}

- (void)encodeWithCoder:(NSCoder*)aCoder

{

[aCoderencodeObject:self.titleforKey:@"title"];

[aCoderencodeObject:self.imageforKey:@"image"];

}


2.<NSCopy>  复制对象。


如果自定义类具有可变和不可变的区别,就需要同时实现NSCopying和NSMutableCopying,在- (id)copyWithZone:(NSZone *)zone返回的是不可变对象,在- (id)mutableCopyWithZone:(NSZone *)zone返回的是可变对象。

如果 [  xx  copy ]没有实现copy协议。会出现 [xx  copyWithZone:]立马崩溃。

ProductModel* productModel2=[productModel1 copy];

productModel2.title=@"ofo共享单车";

NSLog(@"title1:%@title2:%@",productModel1.title,productModel2.title);

NSLog(@"");

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.自定义控件 a.继承某个控件 b.重写initWithFrame方法可以设置一些它的属性 c.在layouts...
    圍繞的城阅读 3,494评论 2 4
  • 1.不可变数组转变为可变数组声明实例变量的数组 必须记得实现 对于遍历数组找到对象后 如果还需要查找 记得先结束 ...
    小新xin阅读 764评论 0 1
  • 本文为转载: 作者:zyydeveloper 链接:http://www.jianshu.com/p/5f776a...
    Buddha_like阅读 923评论 0 2
  • 【2017年最新】☞ iOS面试题及答案 设计模式是什么? 你知道哪些设计模式,并简要叙述? 设计模式是一种编码经...
    紫色冰雨阅读 624评论 0 1
  • 《人民的名义》——大风厂股权之争 2017-04-08 任务之外 陵阪 《人民的名义》正在热播,成为这几天茶余饭后...
    任务之外阅读 836评论 0 0