以下两种比较结果均为真:
1)
@"foo" == @"foo";
2)
NSString *myString1 = @"foo";
NSString *myString2 = @"foo";
myString1 == myString2;
然而,在某些情况下,使用相等运算符无法比较两个NSString
,而需要[myString1 isEqualToString:myString2]
.有人能解释一下吗?
以下两种比较结果均为真:
1)
@"foo" == @"foo";
2)
NSString *myString1 = @"foo";
NSString *myString2 = @"foo";
myString1 == myString2;
然而,在某些情况下,使用相等运算符无法比较两个NSString
,而需要[myString1 isEqualToString:myString2]
.有人能解释一下吗?
==
之所以有效是因为指针比较.使用@""
定义常数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"];