不同设备上不同大小的int类型

时间:2015-10-13 00:14:52

标签: ios objective-c

考虑以下代码片段:

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
}

3 个答案:

答案 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位。这应该解释一切。