gpt4 book ai didi

ios - 共享不可变的 NSString

转载 作者:行者123 更新时间:2023-11-28 22:49:23 25 4
gpt4 key购买 nike

我有一个大约 10k 字典的列表,每个字典包含大约 50 个键。所有词典的键或多或少都相同。

使用 NSDictionary.alloc.initWithContentsOfFile 加载数据。

似乎键对象在不同的​​字典之间重复使用,因此内存中没有大约 500k 个字符串,每个唯一键只有一个字符串,因此只有几百个。

所以我想知道这是否是 initWithContentsOfFile 方法的预期行为并且我可以依赖它,或者在某些情况下我会为不同词典中的相同键获取不同的字符串对象?

最佳答案

您遇到的是 Objective-C 实现的一项功能。我不知道它是否一般是 Cocoa 或 Objective-C 独有的。这是内存优化。

NSString *myString1 = @"Hello!";
NSString *myString2 = @"Hello!";
if (myString1 == myString2) {
NSLog(@"Same");
}

myString1 和 myString2 将指向相同的内存位置。控制台将打印 Same。

NSString *myString1 = [[NSString alloc] initWithString:@"Hello!"];
NSString *myString2 = [[NSString alloc] initWithString:@"Hello!"];
if (myString1 == myString2) {
NSLog(@"Same");
} else {
NSLog(@"Not the same");
}
if ([myString1 isEqualToString:myString2]) {
NSLog(@"String matches");
}

myString1 和 myString2 不会指向相同的内存位置

在这种情况下,控制台会打印 Not the same,然后 String matches。使用 == 比较字符串是不安全的。 NSString 有一个名为 isEqualToString: 的特殊方法用于比较。相同的“字母串”可能不等于相同的“字母串”,因为它们占用不同的内存位置。

无论如何,在您的问题中,如果您使用 initWithContentsOfFile 加载字典,则无需担心在多个字典之间共享键值。每个 NSDictionary 都会为每个键添加一个保留,即使它只在内存中出现一次。您无需担心它会消失。

关于ios - 共享不可变的 NSString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12322478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com