以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生成了一个新的对象 就是深拷贝 本质就是创建了一个新的对象