为什么NSString比较:当字符串不同时返回NSOrderedSame?

为什么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返回nilNSOrderedSame等于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) ... 

注:我添加了这个问题,所以我不会再犯这样的错误。

+1

这是一个非常糟糕的主意! NSString比较文档的参数为“此值不能为零”。所以如果testString为零,可能会崩溃或做其他不好的事情。 – 2009-06-11 01:54:09

可能[anObject aString]返回nil,发送nil消息返回0,并且返回0 == NSOrderedSame。