1、对不可变的对象做 copy:得到的是不可变对象的地址,浅拷贝,拷贝指针,所以,没有产生新对象,依旧不可变;———>浅拷贝
2、对不可变的对象做 mutableCopy :产生新的对象,该对象是可变的。———>深拷贝
3、对可变对象做 copy:得到的是新地址,也就是说,产生了新对象,但是,新对象是不可变的;———>深拷贝
4、对可变对象做 mutableCopy:产生新的对象,该对象是可变的。———>深拷贝
NSArray *arr1 = @[@"abc"]; NSMutableArray *arr2 =[arr1 mutableCopy]; NSMutableArray *arr3 =[arr2 copy]; [arr2 addObject:@"def"]; [arr3 addObject:@"def"]; //arr3为不可变数组,运行时会崩溃 //打印对象的内存地址 NSLog(@"内存地址arr1:%p---arr2:%p***arr3:%p",arr1,arr2,arr3);
NSMutableArray *arr4 = [NSMutableArray arrayWithObjects:@"ghi", nil]; NSMutableArray *arr5 =[arr4 copy]; NSMutableArray *arr6 =[arr5 mutableCopy]; [arr5 addObject:@"jkl"];//arr5为不可变数组,运行时会崩溃 [arr6 addObject:@"jkl"]; //打印对象的内存地址 NSLog(@"内存地址arr4:%p---arr5:%p***arr6:%p",arr4,arr5,arr6);
打印对象的内存地址为
内存地址arr1:0x600002cc0d00---arr2:0x600002088e40***arr3:0x600002cc0da0 内存地址arr4:0x6000020949f0---arr5:0x600002cd6b90***arr6:0x600002094a20
网友评论