OC中的copy使用
/*
copy : 创建的是不可变副本(如NSString、NSArray、NSDictionary),只能用不可变对象接收
mutableCopy :创建的是可变副本(如NSMutableString、NSMutableArray、NSMutableDictionary),只能用可变对象接收
深拷贝和浅拷贝
[深拷贝]-->源对象和拷贝的副本内存地址不一样,实际上产生了新的对象
*可变对象(NSMutableArray)调用了copy方法
*可变对象(NSMutableArray)调用了mutableCopy方法
*不可变对象(NSArray)调用了mutableCopy方法
[浅拷贝]-->指针拷贝,源对象和拷贝的副本内存地址一样,没有产生新的对象
*不可变对象(NSArray)调用copy方法
*/
// 1>NSMutableArray copy, 返回不可变对象(用NSArray接收)
NSMutableArray *arrayM=[NSMutableArray arrayWithArray:@[@"a",@"b"]];
NSArray *array=[arrayM copy];
// array.class __NSArrayI可变对象,__NSArrayM不可变对象
NSLog(@"%@",array.class);
//源对象和副本在内存中的位置不一样
NSLog(@"%p,%p",arrayM,array);
// 2>NSMutableArray mutableCopy, 返回可变对象(用NSMutableArray接收)
NSMutableArray *arrayM1=[NSMutableArray arrayWithArray:@[@"a",@"b"]];
NSMutableArray *am1=[arrayM1 mutableCopy];
NSLog(@"%@",am1.class);
NSLog(@"%p,%p",arrayM1,am1);
// 3>NSArray mutableCopy, 返回可变对象(用NSMutableArray接收)
NSArray *array2 =@[@"a",@"b",@"c"];
NSMutableArray *arrayM2=[array2 mutableCopy];
NSLog(@"%@",arrayM2.class);
NSLog(@"%p,%p",arrayM2,array2);
// 4>NSArray copy, 返回不可变对象 (用NSArray接收)
//不可变对象使用了copy方法,源对象和copy对象都是不可变对象,实际上没有真正的copy,依然指向同一个地址,所以两个变量指向同一个对象后,就可以访问同样的数据,同时也没有必要在拷贝一个副本。
NSArray *array3 =@[@"a",@"b",@"c"];
NSArray *array4=[array3 copy];
NSLog(@"%@",array4.class);
NSLog(@"%p,%p",array3,array4);