总结:
对象复制 mutableCopy© (相当于人与人 互不影响)
copy方法总是返回对象不可修改的副本,即使该对象本身是可修改的。mutableCopy总是返回对象可修改的副本,即使该对象本身是不可修改的。
代码示例:
此处用NSMutableString举例,如果用NSString类型举例被copy则 打印%p是相等的!!!!!在此不再举例。[str copy]
NSMutableString *str = [NSMutableString stringWithString:@"12345"];
NSMutableString *strMCopy = [str mutableCopy]; // 实质是NSMutableString类型
NSString *strCopy = [str copy]; // 实质是NSString类型
// 修改str
[str replaceCharactersInRange:NSMakeRange(1, 2) withString:@"A"];
NSLog(@"str: %@--%p", str, str); // 1A45
NSLog(@"strMCopy: %@--%p", strMCopy, strMCopy); // 12345 %p: strMCopy != str
NSLog(@"strCopy: %@--%p", strCopy, strCopy); // 12345 12345 %p: strCopy != str
// 修改copy后的数据
[strMCopy replaceCharactersInRange:NSMakeRange(1, 2) withString:@"B"];
NSLog(@"str: %@--%p", str, str); // 1A45
NSLog(@"strMCopy: %@--%p", strMCopy, strMCopy); // 1B45 %p: strMCopy != str
NSLog(@"strCopy: %@--%p", strCopy, strCopy); // 12345 %p: strCopy != str
打印结果:
**2023-04-14 18:04:24.232964+0800 PNMeetingPro[4003:246115] str: 1A45--0x600001350570**
**2023-04-14 18:04:24.233113+0800 PNMeetingPro[4003:246115] strMCopy: 12345--0x6000013505a0**
**2023-04-14 18:04:24.233245+0800 PNMeetingPro[4003:246115] strCopy: 12345--0x826d9880e67fa9d8**
**2023-04-14 18:04:24.233341+0800 PNMeetingPro[4003:246115] str: 1A45--0x600001350570**
**2023-04-14 18:04:24.233431+0800 PNMeetingPro[4003:246115] strMCopy: 1B45--0x6000013505a0**
**2023-04-14 18:04:24.233550+0800 PNMeetingPro[4003:246115] strCopy: 12345--0x826d9880e67fa9d8**