【发布时间】:2014-04-10 06:04:17
【问题描述】:
我一直试图通过以下链接了解深拷贝和浅拷贝之间的区别:Difference
我做了什么:
- (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);
}
但是,当我检查日志时,两者都与临时数组相同。任何人都可以用上面的例子来解释这个概念。根据我的理解,Shallow Array 应该改变并且 应从中删除元素“A”,并且深度数组应与临时数组相同。
【问题讨论】:
-
注意:
id a = @"A"; a == [a copy]因为copy与 不可变 对象上的retain相同 -
如果你这样做
shallowArray = [NSMutableArray arrayWithObjects:tempArray, nil];,你会发现不同。
标签: objective-c