深拷贝和浅拷贝

来源:互联网 发布:单片机usb 串口 编辑:程序博客网 时间:2024/06/06 15:18

浅拷贝和深拷贝,不是copy和mutableCopy的区别,而是看是否进行内容的拷贝。

 

copy 浅拷贝,retain,就是对对象的拷贝,对象的内容不拷贝。

deep copy  深拷贝, 就是对对象和对象的内容的拷贝。

 

 

copy和mutableCopy

遵守NSCoping或NSMumtableCoping协议。需要实现

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

//一旦使用copy方法,就会调用这个方法

 

NSString, NSArray, NSDictionary, NSData对象:
 1. 不可变的对象 通过 copy    不可变的

2。不可变的对象  通过 mutablecopy    可变的

3。可变的对象 通过  copy    不可变的

4。可变的对象  通过  mutablecopy   可变的

 

Array和Dictionary深拷贝:

- (id)initWithArray:(NSArray *)array opyItems: (BOOL)flag;- (id)initWithDictionary:(NSDictionary *)otherDictonary copyItems:(BOOL)flag;


归档的方法:(需要实现归档NSCoding)

存档和解档

- (void) encodeWithCoder: (NSCoder *)aCode;- (id) initWithCoder:(NSCoder *)aDecoder;


 

 

 

归档的深拷贝:

NSMutableArray *_carList = [[NSMutableArray alloc] init];//保存Array所有的内容NSData *buffer = [NSKeyedArchiver archivedDataWithRootObject: _carList];//恢复所有内容NSMutableArray *arr3 = [NSKeyedUnarchiver unarchiveObjectWithData:buffer];


 

ps: 如果需要对一个字段进行申请空间并赋值  可以写

self.name = [[[NSString alloc] init] autorelease];

 

 

 

原创粉丝点击