OC-copy 与 mutableCopy使用

84 阅读2分钟

总结:

对象复制 mutableCopy&copy相当于人与人  互不影响

  1. copy 方法总是返回对象不可修改的副本,即使该对象本身是可修改的。
  2. 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**