为什么NSString比较:当字符串不同时返回NSOrderedSame?
问题描述:
为什么比较返回NSOrderedSame ?:为什么NSString比较:当字符串不同时返回NSOrderedSame?
NSString *testString = [anObject aString];
if ([testString compare:@"a string which doesn't equal testString"] == NSOrderedSame) {
//do stuff
}
注:我添加了这个问题,所以我不会再犯这个错误(因此立即答复我给)。
答
这是因为testString
可以等于nil
。发送信息至nil
返回nil
。 NSOrderedSame
等于0
,而0
等于nil
。
NSLog(@"nil == NSOrderedSame = %d", (nil == NSOrderedSame)); //nil == NSOrderedSame = 1
NSLog(@"[nil compare:@\"arf\"] == nil = %d", ([nil compare:@"arf"] == 0)); //[nil compare:@\"arf\"] == nil = 1
为了避免这种保证的对象不是nil
比较之前,例如:
if (testString != nil && [testString compare:@"testString"] == NSSOrderedSame) ...
注:我添加了这个问题,所以我不会再犯这样的错误。
答
可能[anObject aString]返回nil,发送nil消息返回0,并且返回0 == NSOrderedSame。
这是一个非常糟糕的主意! NSString比较文档的参数为“此值不能为零”。所以如果testString为零,可能会崩溃或做其他不好的事情。 – 2009-06-11 01:54:09