IOS数组的深浅拷贝

看了一下网上对于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:0x100114d40
2013-05-29 03:05:58.652 CopyTest[4679:707] mArrayCopy2 address:0x100114d40
2013-05-29 03:05:58.654 CopyTest[4679:707] The first object address in mArray1:0x1001149e0
2013-05-29 03:05:58.655 CopyTest[4679:707] The first object address in mArrayCopy2:0x1001149e0
2013-05-29 03:05:58.657 CopyTest[4679:707] mArrayMCopy1 address:0x1030000a0
2013-05-29 03:05:58.658 CopyTest[4679:707] The first object address in mArrayMCopy1:0x1001149e0

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


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


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值