数组swift值类型和oc引用类型的理解

1.值类型 两块内存

       var arr1 = ["1", "2", "3"]
        var arr2 = arr1
        arr1.append("4")
        print(arr2)

结果

["1", "2", "3"]

 

 

2.引用类型 一块内存 

    NSMutableArray *arr1 = [NSMutableArray arrayWithArray:@[@"1", @"2", @"3"]];
    NSMutableArray *arr2 = arr1;
    [arr1 addObject:@"4"];
    NSLog(@"arr2: %@", arr2);

结果

arr2: (
    1,
    2,
    3,
    4
)

 

3. mutableCopy 两块内存 深copy

    NSMutableArray *arr1 = [NSMutableArray arrayWithArray:@[@"1", @"2", @"3"]];
    NSMutableArray *arr2 = [arr1 mutableCopy];
    [arr1 addObject:@"4"];
    NSLog(@"arr2: %@", arr2);

结果

arr2: (
    1,
    2,
    3
)

 

4. copy 两块内存 深copy

    NSMutableArray *arr1 = [NSMutableArray arrayWithArray:@[@"1", @"2", @"3"]];
    NSMutableArray *arr2 = [arr1 copy];
    [arr1 addObject:@"4"];
    NSLog(@"arr2: %@", arr2);

结果

arr2: (
    1,
    2,
    3
)

 

备注:只有对不可变的(NSString、NSArray、NSDictionary、NSSet)进行copy 是浅复制,其他都是深复制。或者带mutable的都是深复制。浅复制一块内存,深复制两块内存。

posted @ 2025-10-16 17:10  黄增松  阅读(7)  评论(0)    收藏  举报