关于copy与mutablecopy =赋值符号

//第一部分
    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.=赋值都是浅拷贝,无论是可变对象还是不可变对象

你可能感兴趣的:(关于copy与mutablecopy =赋值符号)