あなたが経験しているのは、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 は同じメモリ位置を指しません
この場合、コンソールは「同じではありません」と表示し、次に「文字列が一致します」と出力します。== を使用して文字列を比較するのは安全ではありません。NSString には、比較のために isEqualToString: という特別なメソッドがあります。同じ「文字列」が同じ「文字列」と等しくない可能性があります。これは、それらが異なるメモリ位置を占めるためです。
とにかく、あなたの質問では、 initWithContentsOfFile を使用して辞書をロードしている場合、複数の辞書でキー値を共有することを心配する必要はありません。各 NSDictionary は、メモリ内に一度しかない場合でも、各キーに保持を追加します。消える心配はありません。