0

我很确定这个问题有一个非常简单的答案,我现在应该已经弄清楚了。由于我还没有这样做所以我来找你,堆栈溢出蜂巢的头脑。

我希望下面的循环打印出从 0 到 5 的数字。相反,它只打印出 0 和 4。为什么 LoopNumber++ 将我的 NSNumber LoopNumber 增加 4 而不是 1?

NSNumber *LoopNumber;
for (LoopNumber=0; LoopNumber<=5; LoopNumber++) {
    NSLog(@"%d",LoopNumber);
}

如果我将其更改为以下内容,它将完全按照我的预期工作。是什么赋予了?

for (int LoopNumber=0; LoopNumber<=5; LoopNumber++) {

我正在使用 SDK 3.1.2 在 XCode 3.2.1 中玩弄一个 iPhone 项目。

4

2 回答 2

4

NSNumber 不是整数。它是一个可能是整数的数字的对象包装器。

变量 LoopNumber 实际上是一个指针,指向对象应该在内存中的位置。所有 LoopNumber 本身拥有的是一个内存地址,在您的机器上是 4 个字节长。当您执行 LoopNumber++ 时,您正在指针上进行指针运算,并且它正在前进到四个字节后的下一个内存地址。您可以通过执行 sizeof(LoopNumber) 来看到这一点 - 这将在您的系统上返回 4。

您真正想要做的是使用像这样的常规整数:

NSUInteger loopNumber;
for(loopNumber = 0; loopNumber <= 5; loopNumber++) {
  NSLog(@"%d",loopnumber);
}

或者如果你真的需要使用 NSNumbers:

NSNumber loopNumber;
for(loopNumber = [NSNumber numberWithInt:0]; [loopNumber intValue] <= 5; loopNumber=[NSNumber numberWithInt:[loopNumber intValue]++]) {
  NSLog(@"%d",loopnumber);
}
于 2010-12-24T06:36:22.933 回答
0

int 是本机类型。NSNumber 是一个 Objective-C 类。做实际工作时使用 float 或 int。但是要将 int 放入集合中,您可以从 int 或 float 本机类型创建 NSNumber 对象。

于 2010-12-24T06:33:35.130 回答