关于深拷贝和浅拷贝

以NSString与NSMutableString举例

  • NSMutableString 拷贝 NSString
    NSString *str1 = @"xfj";
    NSMutableString *str2 = [str1 mutableCopy];
    [str2 appendString:@"123"];
    NSLog(@"%@ %@",str1,str2);
    NSLog(@"%p %p",str1,str2);

输出结果:
xfj xfj123
0x102701068 0x600000263b40
会生成一个新的对象
- NSMutableString 拷贝 NSMutableString

    NSMutableString *str1 = [NSMutableString stringWithFormat:@"xfj"];
    NSMutableString *str2 = [str1 mutableCopy];
    [str2 appendString:@"123"];
    NSLog(@"%@ %@",str1,str2);
    NSLog(@"%p %p",str1,str2);

输出结果:
xfj xfj123
0x60800007f400 0x60800007f500
会生成一个新的对象
- NSString 拷贝 NSMutableString

    NSMutableString *str1 = [NSMutableString stringWithFormat:@"xfj"];
    NSString *str2 = [str1 copy];
    [str1 appendString:@"123"];
    NSLog(@"%@ %@",str1,str2);
    NSLog(@"%p %p",str1,str2);

输出结果:
xfj123 xfj
0x600000076900 0xa000000006a66783
会生成一个新的对象
- NSString 拷贝 NSString

    NSString *str1 = @"xfj";
    NSString *str2 = [str1 copy];
    NSLog(@"%@ %@",str1,str2);
    NSLog(@"%p %p",str1,str2);

输出结果:
xfj xfj
0x102047068 0x102047068
不会生成一个新的对象


可见OC为了对内存进行优化
当一个不可变的对象copy另一个不可变的对象时 并不会生成一个新的对象 两个对象都不能修改 那么就没有必要生成一个新的对象 浅拷贝 本质就是指针的copy
如果copy生成了一个新的对象 就是深拷贝 本质就是创建了一个新的对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值