我一直试图通过以下链接来理解深度和浅层副本之间的区别:差异
我做了什么 :
- (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保持一致.
所以你在这里做的是创建三个数组,tempArray并shallowArray指向相同的对象和deepArray副本.
在实例化数组之后,最初是这样的:

双方tempArray并shallowArray指向同一个对象.但阵列本身就是不同的对象!
之后
[tempArray removeObjectAtIndex:0]
情况就是这样:

您似乎怀疑的行为可以通过shallowArray指向同一个对象来实现tempArray:
shallowArray = tempArray;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
731 次 |
| 最近记录: |