浅拷贝和深拷贝之间的区别

Var*_*hta 0 objective-c

我一直试图通过以下链接来理解深度和浅层副本之间的区别:差异

我做了什么 :

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    tempArray=[[NSMutableArray alloc] initWithObjects:@"A",@"B",@"C",@"D",@"E",@"F",@"G", nil];
    shallowArray=[[NSMutableArray alloc] initWithArray:tempArray copyItems:NO];
    deepArray=[[NSMutableArray alloc] initWithArray:tempArray copyItems:YES];
}

- (IBAction)testShallowDeep:(id)sender {

    [tempArray removeObjectAtIndex:0];
    NSLog(@"ShallowArray should get changed==%@",shallowArray);
    NSLog(@"DeepArray should remain Same===%@'",deepArray);
}
Run Code Online (Sandbox Code Playgroud)

但是,当我检查日志时,两者都与临时数组相同.任何人都可以用上面的例子解释这个概念.根据我的理解,Shallow Array应该被更改,元素'A'应该从它中删除,Deep Array应该与temp Array保持一致.

fgu*_*aar 6

所以你在这里做的是创建三个数组,tempArrayshallowArray指向相同的对象和deepArray副本.

在实例化数组之后,最初是这样的:
在此输入图像描述

双方tempArrayshallowArray指向同一个对象.但阵列本身就是不同的对象!

之后

[tempArray removeObjectAtIndex:0]

情况就是这样: 在此输入图像描述

您似乎怀疑的行为可以通过shallowArray指向同一个对象来实现tempArray:

shallowArray = tempArray;
Run Code Online (Sandbox Code Playgroud)