【发布时间】:2012-07-21 07:04:08
【问题描述】:
当我alloc和init两个NSString变量并比较它们的指针时,它们是相同的。这是一个显示这一点的 sn-p:
NSString *s1 = [[NSString alloc] initWithString:@"hello world"];
NSString *s2 = [[NSString alloc] initWithString:@"hello world"];
if (s1 == s2) {
NSLog(@"==");
}else {
NSLog(@"!=");
}
为什么s1 和s2 是一样的?
【问题讨论】:
-
在您的 if 语句中,您不是在比较指针,而是比较它们指向的数据,并且查看代码,我会说“hello world”100% 等于“hello world” .
-
@NSArray:不,这是指针比较。您需要发送消息(
isEqual:或isEqualToString:)来比较这些值。 -
@NSArray 他正在比较指针。比较对象需要使用“*s1 == *s2”(这对字符串没有意义——你不能在Objective-C中重载==)。正如@Josh 所指出的,字符串内容与
-isEqualToString:进行比较。如果内容匹配,它将返回YES,即使您正在比较两个不同的实例。
标签: objective-c cocoa nsstring