浅拷贝和深拷贝,不是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];