Причина, по которой работает ==
, заключается в сравнении указателей.Когда вы определяете константу 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"];