2013-05-09 46 views
0
NSMutableDictionary *dic0 = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"string0", @"key0", nil]; 
NSDictionary *dic1 = [[NSDictionary alloc] initWithObjectsAndKeys:@"string1", @"key1", nil]; 
NSDictionary *dic2 = [[NSDictionary alloc] initWithObjectsAndKeys:@"string2", @"key2", nil]; 
NSDictionary *dic3 = [[NSDictionary alloc] initWithObjectsAndKeys:@"dic3", @"key3", nil]; 

NSArray *arrayOri = [[NSArray alloc] initWithObjects:dic0, dic1, dic2, nil]; 

//here means a deep copy 
NSMutableArray *arrayDeepCopy = [[NSMutableArray alloc] initWithArray:arrayOri copyItems:YES]; 

NSRange range = {0, 2}; 
NSArray *subArray = [arrayOri subarrayWithRange:range]; 
[arrayDeepCopy addObject:dic3]; 

NSLog(@"arrayOri not merge %@", arrayOri); 

//merge one object 
[dic0 setObject:@"mutableV" forKey:@"mutableKey"]; 
//dealloc one object 
[dic1 dealloc]; 

NSLog(@"arrayOri %@ ", arrayOri); 
NSLog(@"subArray %@ ", subArray); 

坠毁在这里,因为DIC1的dealloced,如果深拷贝,为什么原来的对象有新对象的效果?initWithArray:(NSArray的*)阵列copyItems:(BOOL)标志

NSLog(@"array %@ ", arrayDeepCopy); 

what initWithArray:(NSArray *)array copyItems:(BOOL)flag do after all?? 
+0

你需要更好地解释你的问题。请不要只将代码粘贴到评论中。这些很容易被忽略。用例子问一个问题,请阅读[faq]和[about] – Liam 2013-05-09 07:33:40

回答

0

问题是,dic1是一个不可变的对象。因此将它复制到内存中是没有意义的,因此arrayDeepCopy包含一个指向原始对象的指针dic1。当你释放它时,它从存储它的所有数组中消失。
如果你想有一个真正的深拷贝,你必须实例化一个NSMutableDictionary

+0

@ user2365237:我没有得到任何回应我的答案。所以,如果它解决了你的问题,请考虑接受它。如果仍有问题,请添加评论。 – 2013-05-12 14:50:45