Ios NSString,NSMutableString内存

Ios NSString,NSMutableString内存,ios,objective-c,nsstring,Ios,Objective C,Nsstring,这里有两个字符串对象 NSString *name1 = @"Julia"; NSString *name2 = @"Julia"; NSLog(@"name1's memory: %p and name2's memory: %p", name1, name2); 这是两个对象,因为内容完全相同,它会自动指向相同的内存 这是日志 name1's memory: 0x100002320 and name2's memory: 0x100002320

这里有两个字符串对象

    NSString *name1 = @"Julia";
    NSString *name2 = @"Julia";

    NSLog(@"name1's memory: %p and name2's memory: %p", name1, name2);
这是两个对象,因为内容完全相同,它会自动指向相同的内存

这是日志

    name1's memory: 0x100002320 and name2's memory: 0x100002320
    name1's memory: 0x10010a4c0 and name2's memory: 0x10010a550
Java编程语言中也存在同样的行为

接下来,我对NSMutableString进行相同的测试

    NSString *name1 = [NSMutableString stringWithString:@"Julia"];
    NSString *name2 = [NSMutableString stringWithString:@"Julia"];

    NSLog(@"name1's memory: %p and name2's memory: %p", name1, name2);
这是日志

    name1's memory: 0x100002320 and name2's memory: 0x100002320
    name1's memory: 0x10010a4c0 and name2's memory: 0x10010a550
结果是不同的。每一个都指向自己的记忆


你怎么解释?NSString是否更有效?

在这个精心设计的示例中,您可以从以下方面获得相同的性能:

NSString *name1 = [NSMutableString stringWithString:@"Julia"];
NSString *name2 = name1;
但是,是的,不可变字符串将在可能的情况下通过指向相同的内存地址来尝试获得更好的性能,显然,这不会发生在可变字符串上,因为修改一个字符串不应该为了效率而更改指向相同内存的其他任意字符串。在大多数情况下,可变字符串的效率会更高,但在这个精心设计的示例中,就内存空间而言,不可变字符串的效率肯定会更高