IOS数组的深浅拷贝

来源:互联网 发布:云计算与应用就业前景 编辑:程序博客网 时间:2024/05/16 15:26

看了一下网上对于NSArray和NSMutableArray的深浅拷贝的文章,觉得有些地方不靠谱,自己做了一下实验,将结果留档

    NSArray *mArray1 = [NSArray arrayWithObjects:[NSMutableString stringWithString:@"a"],@"b",@"c",nil];           NSArray *mArrayCopy2 = [mArray1 copy];    NSLog(@"mArray1 address:%p", mArray1);    NSLog(@"mArrayCopy2 address:%p", mArrayCopy2);        NSLog(@"The first object address in mArray1:%p", [mArray1 objectAtIndex:0]);    NSLog(@"The first object address in mArrayCopy2:%p", [mArrayCopy2 objectAtIndex:0]);            NSMutableArray *mArrayMCopy1 = [mArray1 mutableCopy];    NSLog(@"mArrayMCopy1 address:%p", mArrayMCopy1);    NSLog(@"The first object address in mArrayMCopy1:%p", [mArrayMCopy1 objectAtIndex:0]);

如上所示,mArray1是一个fixed的Array, 自己不能变化。 mArrayCopy2是使用copy方法复制的fixed对象 mArrayMCopy1是使用mutableCopy方法复制的可变数组

输出结果如下

2013-05-29 03:05:58.649 CopyTest[4679:707] mArray1 address:0x100114d402013-05-29 03:05:58.652 CopyTest[4679:707] mArrayCopy2 address:0x100114d402013-05-29 03:05:58.654 CopyTest[4679:707] The first object address in mArray1:0x1001149e02013-05-29 03:05:58.655 CopyTest[4679:707] The first object address in mArrayCopy2:0x1001149e02013-05-29 03:05:58.657 CopyTest[4679:707] mArrayMCopy1 address:0x1030000a02013-05-29 03:05:58.658 CopyTest[4679:707] The first object address in mArrayMCopy1:0x1001149e0

可以看到mArray1和MArrayCopy2指向同一个数组地址,这个数组里面的第一个对象的地址也是相同的。但是mArrayMCopy1指向的是另外一个数组,这个数组是指针数组,他们指向的具体的对象的地址和mArray1是相同的,不是完全意义上的深拷贝,如果是完全意义上的深拷贝,应该指向对象的地址也会改变。当然这里尝试的是字符串。因为Xcode对字符串有优化,我想我应该使用别的对象来试试。


实践证明,和使用NSString的结果是一样的


原创粉丝点击