1.  存储一个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.  复制对象。


如果自定义类具有可变和不可变的区别,就需要同时实现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(@"");

你可能感兴趣的:()