当运行以下代码时,它进入for循环并运行NSLog。为什么会这样?
NSString *aString = nil;
for (int i=0; i<([aString length]-2); i++) {
NSLog(@"Inside loop.");
}
因为我认为[aString length]-2
导致-2并且小于0?
答案 0 :(得分:5)
更准确地说,-[NSString length]
返回一个无符号整数,所以从零减去两个(记住,调用nil
上的任何方法给你零)不给你-2,它给你一个非常非常大的数字。将其投放到int
(或NSInteger
)以获得所需的结果。
答案 1 :(得分:0)
如果i<-2
,你要求for循环运行;当[NSString length]
返回无符号整数时,此值将回绕到max int - 2。
您也将消息传递给nil对象:[aString length]
。我不确定这是定义的行为,并且可能返回一个奇怪的值范围,但我怀疑它可能足够聪明地返回0.我的评论员说这种怀疑是真的。