動作する理由==
は、ポインタの比較のためです。NSString
を使用して定数を定義する@""
と、コンパイラは参照を一意化します。コード内の他の場所で同じ定数が定義されている場合、それらはすべてメモリ内の同じ実際の場所を指します。
NSString
インスタンスを比較するときは、次のisEqualToString:
方法を使用する必要があります。
NSString *myString1 = @"foo";
NSString *myString2 = @"foo";
NSString *myString3 = [[NSString alloc] initWithString:@"foo"];
NSLog(@"%d", (myString2 == myString3)) //0
NSLog(@"%d", (myString1 == myString2)); //1
NSLog(@"%d", [myString1 isEqualToString:myString2]); //1
NSLog(@"%d", [myString1 isEqualToString:myString3]); //1
[myString3 release];
編集:
NSString *myString3 = [[NSString alloc] initWithString:@"foo"];
// this is same with @"foo"
initWithString:
これ以上新しい参照を作成しません。必要になりますinitWithFormat
、
NSString *myString3 = [[NSString alloc] initWithFormat:@"foo"];