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(@"");