我正在尝试为 NSMutableArray 实现深拷贝和浅拷贝,
self.oldArray =[[NSMutableArray alloc] initWithCapacity:0];
self.shallowCopy =[[NSMutableArray alloc] initWithCapacity:0];
self.deepCopy =[[NSMutableArray alloc] initWithCapacity:0];
//add object to old Array
[self.oldArray addObject:@"rooban"];
[self.oldArray addObject:@"radha"];
[self.oldArray addObject:@"jesus"];
[self.oldArray addObject:@"god"];
self.shallowCopy=[[NSMutableArray alloc] initWithArray:self.oldArray];
self.deepCopy=[[NSMutableArray alloc] initWithArray:self.oldArray copyItems:YES];
//deep copy
NSLog(@"Lenght of the Old Array before: %d",self.deepCopy.count);
[self.deepCopy removeObject:@"rooban"];
NSLog(@"Lenght of the Old Array After: %d",self.oldArray.count);
//shallow copy
NSLog(@"Lenght of the Old Array Before: %d",self.shallowCopy.count);
[self.shallowCopy removeObject:@"rooban"];
NSLog(@"Lenght of the Old Array After: %d",self.oldArray.count);
这个程序的输出是,
深拷贝:
之前旧数组的长度:4
之后旧数组的长度:4
浅拷贝:
之前旧数组的长度:4
之后旧数组的长度:4
我不知道为什么浅拷贝删除没有反射(reflect)到原始 NSMutableArray。
最佳答案
你可以这样理解..
NSMutableArray *oldArray =[[NSMutableArray alloc] initWithCapacity:0]; NSMutableArray *shallowCopy;//=[NSMutableArray arrayWithCapacity:0]; NSMutableArray *deepCopy;//=[[NSMutableArray alloc] initWithCapacity:0];
//add object to old Array
[oldArray addObject:@"rooban"];
[oldArray addObject:@"radha"];
[oldArray addObject:@"jesus"];
[oldArray addObject:@"god"];
shallowCopy = oldArray;
deepCopy = [oldArray mutableCopy];
//deep copy
NSLog(@"Lenght of the Old Array before: %d",deepCopy.count);
[deepCopy removeObject:@"rooban"];
NSLog(@"Lenght of the Old Array After: %d",oldArray.count);
//shallow copy
NSLog(@"Lenght of the Old Array Before: %d",shallowCopy.count);
[shallowCopy removeObject:@"rooban"];
NSLog(@"Lenght of the Old Array After: %d",oldArray.count);
输出是:
(-[ViewController viewDidLoad]) (ViewController.m:34) 之前旧数组的长度:4 (-[ViewController viewDidLoad]) (ViewController.m:36) 之后旧数组的长度:4 (-[ViewController viewDidLoad]) (ViewController.m:39) 之前旧数组的长度:4 (-[ViewController viewDidLoad]) (ViewController.m:41) 之后旧数组的长度:3
浅拷贝和深拷贝的概念是:
如果B是A的浅拷贝,那么就像B = [A assign];
B和A指向同一个内存位置
如果B是A的深拷贝,那么就像B = [A copy];
B和A指向不同的内存位置
B 的内存大小与 A 的相同
B和A有相同的内容
关于ios - iOS中NSMutableArray如何实现深拷贝和浅拷贝?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15050196/