我很确定这个问题有一个非常简单的答案,我现在应该已经弄明白了。由于我还没有这样做,所以我来找你,堆叠溢出的蜂巢。
我期望下面的循环打印出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项目。
答案 0 :(得分:4)
NSNumber不是整数。它是一个数字的对象包装器,可以是一个整数。
变量LoopNumber实际上是指向对象应该在内存中的位置的指针。所有LoopNumber本身都是一个内存地址,在你的机器上是4个字节长。当你执行LoopNumber ++时,你在指针上使用指针aritmatic并且它前进到下一个4字节后的内存地址。您可以通过执行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);
}
答案 1 :(得分:0)
int是本机类型。 NSNumber是Objective-C类。在做实际工作时使用float或int。但是要将int放入集合中,您可以从int或float本机类型创建NSNumber对象。