ios下的深拷贝和浅拷贝概念

ios下的深拷贝和浅拷贝,copy && mutableCopy

其中 Model继承自NSObject ,看看log,可能有你想不到的结果

    Model * model = [[Model alloc] init];
    NSLog(@"model rc=%d",[model retainCount]);
    NSArray * oriArray = [NSArray arrayWithObjects:model,@"a",@"b", nil];//源数据,不可修改
    NSLog(@"model rc=%d,oriArray rc=%d",[model retainCount],[oriArray retainCount]);
    NSArray * oriArrayCopy = [oriArray copy];//跟oriArray地址一样,浅拷贝,不可修改
    NSLog(@"model rc=%d,oriArray rc=%d,oriArrayCopy rc=%d",[model retainCount],[oriArray retainCount],[oriArrayCopy retainCount]);
    NSArray * oriArrayMCopy = [oriArray mutableCopy];//深拷贝,生成了NSMutableArray,可以修改
    NSLog(@"model rc=%d,oriArray rc=%d,oriArrayCopy rc=%d,oriArrayMCopy rc=%d",[model retainCount],[oriArray retainCount],[oriArrayCopy retainCount],[oriArrayMCopy retainCount]);

    NSLog(@"oriArray =%p ,0 =%p",oriArray,[oriArray objectAtIndex:0]);
    NSLog(@"oriArrayCopy =%p ,0 =%p ",oriArrayCopy,[oriArrayCopy objectAtIndex:0]);
    NSLog(@"oriArrayMCopy =%p ,0 =%p ",oriArrayMCopy,[oriArrayMCopy objectAtIndex:0]);
    NSLog(@"++++++");
    
    
    Model * model2 = [[Model alloc] init];
    NSLog(@"model rc=%d",[model2 retainCount]);
    NSMutableArray *oriMArray = [NSMutableArray arrayWithObjects:model2,@"a", @"b",nil];//源数据,可以修改
    NSLog(@"model rc=%d,oriMArray rc=%d",[model2 retainCount],[oriMArray retainCount]);
    NSMutableArray *oriMArrayCopy = [oriMArray copy];//深拷贝,生成不可变的NSArray
    NSLog(@"model rc=%d,oriMArray rc=%d,oriMArrayCopy rc=%d",[model2 retainCount],[oriMArray retainCount],[oriMArrayCopy retainCount]);
    NSMutableArray *oriMArrayMCopy = [oriMArray mutableCopy];//深拷贝,可以修改
    NSLog(@"model rc=%d,oriMArray rc=%d,oriMArrayCopy rc=%d,oriMArrayMCopy rc=%d",[model2 retainCount],[oriMArray retainCount],[oriMArrayCopy retainCount],[oriMArrayMCopy retainCount]);
//  NSMutableArray *oriMArrayMCopy2 = [[NSMutableArray alloc] initWithArray:oriMArray copyItems:YES];
    
    NSLog(@"oriMArray =%p, 0 =%p",oriMArray,[oriMArray objectAtIndex:0]);
    NSLog(@"oriMArrayCopy =%p, 0 =%p ",oriMArrayCopy,[oriMArrayCopy objectAtIndex:0]);
    NSLog(@"oriMArrayMCopy =%p, 0 =%p ",oriMArrayMCopy,[oriMArrayMCopy objectAtIndex:0]);
  //NSLog(@"oriMArrayMCopy2 0 =%p c=%d",[oriMArrayMCopy2 objectAtIndex:0],[[oriMArrayMCopy2 objectAtIndex:0] retainCount]);


结果

 model rc=1
 model rc=2,oriArray rc=1
 model rc=2,oriArray rc=2,oriArrayCopy rc=2
 model rc=3,oriArray rc=2,oriArrayCopy rc=2,oriArrayMCopy rc=1
 oriArray =0x8a6d380 ,0 =0x8a6cc50
 oriArrayCopy =0x8a6d380 ,0 =0x8a6cc50 
 oriArrayMCopy =0xa23f940 ,0 =0x8a6cc50 
 ++++++
 model rc=1
 model rc=2,oriMArray rc=1
 model rc=3,oriMArray rc=1,oriMArrayCopy rc=1
 model rc=4,oriMArray rc=1,oriMArrayCopy rc=1,oriMArrayMCopy rc=1
 oriMArray =0x8a5cac0, 0 =0x8e5edb0
 oriMArrayCopy =0x8e59440, 0 =0x8e5edb0 
 oriMArrayMCopy =0x8c3e990, 0 =0x8e5edb0

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值