这里我有 2 个字符串对象
NSString *name1 = @"Julia";
NSString *name2 = @"Julia";
NSLog(@"name1's memory: %p and name2's memory: %p", name1, name2);
这是2个对象,因为内容完全相同,所以自动指向相同的内存。
这是日志
name1's memory: 0x100002320 and name2's memory: 0x100002320
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: 0x10010a4c0 and name2's memory: 0x10010a550
结果不同。每一个都指向自己的内存。
你怎么解释这个? NSString 更高效吗?
最佳答案
在这个人为的例子中,您可以从以下方面获得相同的性能:
NSString *name1 = [NSMutableString stringWithString:@"Julia"];
NSString *name2 = name1;
但是,是的,不可变字符串会尝试通过尽可能指向相同的内存地址来获得更好的性能,显然可变字符串不会发生这种情况,因为修改一个字符串不应该更改指向同一内存的其他任意字符串为了效率。在大多数情况下,可变字符串会更高效,但可以肯定的是,在这个人为的示例中,不可变字符串在内存空间方面会更高效。
关于ios - NSString、NSMutableString 内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24003732/