当字符串为零时,为什么([str length] - 2)大于0?

时间:2011-10-26 16:01:06

标签: objective-c for-loop

当运行以下代码时,它进入for循环并运行NSLog。为什么会这样?

NSString *aString = nil;

for (int i=0; i<([aString length]-2); i++) {
   NSLog(@"Inside loop.");
}

因为我认为[aString length]-2导致-2并且小于0?

2 个答案:

答案 0 :(得分:5)

更准确地说,-[NSString length]返回一个无符号整数,所以从零减去两个(记住,调用nil上的任何方法给你零)不给你-2,它给你一个非常非常大的数字。将其投放到int(或NSInteger)以获得所需的结果。

答案 1 :(得分:0)

如果i<-2,你要求for循环运行;当[NSString length]返回无符号整数时,此值将回绕到max int - 2。

您也将消息传递给nil对象:[aString length]。我不确定这是定义的行为,并且可能返回一个奇怪的值范围,但我怀疑它可能足够聪明地返回0.我的评论员说这种怀疑是真的。