我有一行代码,它将根据数据类型 "day" 和 "1" 的不同而产生不同的效果。我认为以下是这个代码,尽管稍后我会检查我的源代码。
day = day + 1;
这样做有意义吗?会有什么区别呢?
我有一行代码,它将根据数据类型 "day" 和 "1" 的不同而产生不同的效果。我认为以下是这个代码,尽管稍后我会检查我的源代码。
day = day + 1;
这样做有意义吗?会有什么区别呢?
NSInteger
是一个类型定义,用于描述整数 - 但在64位平台上它不等同于int
。
您可以通过在Xcode中cmd-click NSInteger
来查看typedef。
NSInteger
在构建32位应用程序时被定义为int
,在64位应用程序中被定义为long
。
大多数情况下,您可以使用NSInteger
替换int
,但在这样做时需要考虑一些问题。
苹果关于Cocoa的64位过渡指南提供了一些相关信息。
NSNumber是一个帮助您将数字类型存储为对象的类。它有用于在不同类型之间转换和检索数字值字符串表示形式的方法。
如果您像在示例中所示那样使用类型为NSNumber*
的变量day
,则您修改的不是day
的值,而是它的内存地址。
如果您正在处理时间值,也可以查看NSDate。
NSInteger
是普通整数,NSNumber
是一个对象,而 int
是一个基本数据类型。
NSInteger
只是长整型的一个同义词。
如果需要存储一个数字,请使用 NSNumber。如果正在进行计算、循环等操作,请使用 NSInteger、NSUInteger 或 int。
可以使用以下方式将 NSInteger 包装到 NSNumber 中:
NSNumber *NumberToStore = @(21);
并使用以下方式获取它:
NSInteger retrievingInteger = [NumberToStore integerValue];
NSInteger
和 int
是等价的,NSNumber
是一个用于存储原始数字类型(int、long、float 等)的对象。
如果 day
是一个 NSinteger
,你发布的示例代码将可以正常工作;如果它是一个 NSNumber
,则完全无法工作。
1
是一个字面量,如果适用的话,编译器将其转换为相应的数值类型。但是需要注意的是,虽然NSInteger
和int
在大多数情况下是相同的,但NSNumber
是一个对象类型。因此,在这种情况下,你的代码是没有意义的(并且不应该编译通过)。实际上,有些情况下它可能会有一定的意义,比如指针算术方面,但那绝对不是你想要的结果。对于NSNumber
,你应该使用类似以下的代码:day = [NSNumber numberWithInt:[day intValue] + 1];