ios - NSString、NSMutableString 内存

标签 ios objective-c nsstring

这里我有 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/

相关文章:

iOS - 保存到库/缓存/会导致错误吗?

ios - 如何格式化字符串以在 ios 中正确显示

ios - 访问单个字符串参数(UIAlertView otherButtonTitles)

swift - 从 Swift 中的字符串中删除某个字符后的所有字符

ios - 修复核心数据迁移错误的最佳方法

ios - 使用 Swift 查询可用的 iOS 磁盘空间

ios - LZMA SDK 为 iOS (xcode) 解压缩使用太多 RAM

iphone - 具有方向或箭头主题的 UISegmentedControl

python - 如何在 Mac 上用 Python 监听鼠标事件?

iphone - 以编程方式从通知托盘中删除 UILocalNotification