考虑以下代码片段:
if (((int)[@"foo" rangeOfString @"a"].location+1) > 0)
{
// found a
}
else
{
// not found a
}
在发布版本上,它可以在iPad Air等新设备上正常工作(即无法找到)。但是在iPad 2这样的旧设备上,它没有(即去找//找到)。
通过Xcode进行调试时,它可以在所有设备上正常工作。
PS:我知道上面的编码习惯很差,我应该使用以下内容。但我想了解上述行为。if ([@"foo" rangeOfString @"a"].location != NSNotFound)
{
// found a
}
else
{
// not found a
}
答案 0 :(得分:1)
rangeOfString.location
返回NSNotFound
。
NSNotFound
声明为NSIntegerMax
,32位系统为32位,64位系统为64位。
通过将类型转换为始终为32位的int
来解决问题。
将64位整数转换为int
将导致精度和/或符号无效。
答案 1 :(得分:0)
我认为它可能与32位和64位架构有关,也许优化器正在搞乱它
打印您从中获取的值
答案 2 :(得分:0)
NSInteger是32位或64位。 int是32位。这应该解释一切。