什么您遇到的是Objective-C中实现的功能。我不知道它是否是Cocoa或Objective-C专有的。这是一个内存优化。
NSString *myString1 = @"Hello!";
NSString *myString2 = @"Hello!";
if (myString1 == myString2) {
NSLog(@"Same");
}
myString1和myString2都将指向相同的内存位置。控制台将打印相同。
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将不会指向同一个内存位置
在这种情况下,控制台会打印不一样,然后字符串相匹配。通过使用==来比较字符串是不安全的。 NSString有一个叫做isEqualToString的特殊方法:用于比较。有可能得到相同的“字母串”,因为它们占据不同的存储位置,所以不能等于相同的“字母串”。
不管怎样,在你的问题,你如果你使用initWithContentsOfFile加载一个字典,你不必担心有在多个词典共享密钥值。每个NSDictionary都会为每个键添加一个保留,即使它只在内存中一次。你不必担心它消失。
我不会依赖于相同的字符串总是被相同的字符串。这很可能会发生,但像initWithContentsOfFile这样的东西,其部分实现深埋在Objective-C的蜘蛛网填充的酒窖中,没有凡人敢于践踏,并且可能无法保证。 –