//第一部分
NSArray* arr =@[@"1",@"2",@"3"];
NSArray* copyArr = [arr copy]; //编译时是NSArray类型 运行时是NSArray类型 指针指向arr(浅拷贝)
NSMutableArray* copyArr2 = [arr copy]; //编译时是NSMutableArray类型 运行时是NSArray类型 指针指向arr(浅拷贝)
NSMutableArray* mutableCopyArr = [arr mutableCopy]; //编译时是NSMutableArray类型 运行时是NSMutableArray类型 重新开辟内存空间(深拷贝)
NSArray* mutableCopyArr2 = [arr mutableCopy]; //编译时是NSArray类型 运行时是NSMutableArray类型 重新开辟内存空间(深拷贝)
//第二部分
NSArray* arr2 =@[@"4",@"5",@"6"];
NSArray* arr3 = arr2; //编译时NSArray类型 运行时NSArray类型 指针指向arr2(浅拷贝)
NSMutableArray* arr4 = arr2; //编译时NSArray类型 运行时NSArray类型 指针指向arr2(浅拷贝) 并且会报类型警告
//第三部分
NSMutableArray * arr5 = [NSMutableArray arrayWithArray:@[@"7",@"8",@"9"]];
NSArray* arr6 = arr5; //编译时NSArray类型 运行时NSMutableArray类型 指针指向arr5(浅拷贝)
NSMutableArray* arr7 = arr5; /编译时NSMutableArray类型 运行时NSMutableArray类型 指针指向arr5(浅拷贝)
//第四部分
NSMutableArray * mutableArr = [NSMutableArray arrayWithArray:@[@"1",@"2",@"3",]];
NSArray* copyMutableArr = [mutableArr copy]; //编译时NSArray类型 运行时NSArray类型 重新开辟内存空间(深拷贝)
NSMutableArray* copyMutableArr2 = [mutableArr copy]; //编译时NSMutableArray类型 运行时NSArray类型 重新开辟内存空间(深拷贝)
NSArray* mutableCopyMutableArr = [mutableArr mutableCopy]; //编译时NSArray类型 运行时NSMutableArray类型 重新开辟内存空间(深拷贝)
NSMutableArray* mutableCopyMutableArr2 = [mutableArr mutableCopy]; //编译时NSMutableArray类型 运行时NSMutableArray类型 重新开辟内存空间(深拷贝)
总结:
1.不可变对象copy都是浅拷贝(指针指向被拷贝对象)
2.不可变对象mutableCopy都是深拷贝(开辟内存地址拷贝数据)
3.可变对象copy与mutableCopy都是深拷贝(开辟内存地址拷贝数据)
4.=赋值都是浅拷贝,无论是可变对象还是不可变对象
网友评论