2009-06-10 66 views

回答

9

这是因为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

5

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

相关问题