int vs NSNumber vs NSInteger
我有一行代码将根据数据types“日”和“1”的不同而有所不同。 我相信这是以下内容,不过稍后我会检查我的源代码。
day = day + 1;
这有道理吗? 分歧是什么?
NSInteger
是描述一个整数的types定义 – 但它在64位平台上不等于int
。
您可以通过在Xcode中单击NSInteger
来检查typedef。
构build32位应用程序时, NSInteger
被定义为int
,而64位应用程序则被定义为int
。
大多数情况下,你可以用NSIntegerreplaceint,但是这样做的时候有一些事情要考虑。
苹果的Cocoa 64位转换指南有一些关于这方面的信息。
NSNumber是一个类,可以帮助您将数字types存储为对象。 它有方法之间转换不同的types和方法来检索您的数值的string表示。
如果您在您的示例中使用types为NSNumber*
的variablesday
,则不会修改date的值,而是修改其内存地址。
如果你正在使用时间值,你也可以看看NSDate 。
NSInteger
是一个简单的整数, NSNumber
是一个对象,其中int
是一个原始数据types。
NSInteger只不过是一个长整数的同义词。
如果您需要在某处存储号码,请使用NSNumber。 如果你正在做计算,循环等,使用NSInteger,NSUInteger或int。
您可以使用以下命令将NSInteger封装到NSNumber中:
NSNumber *NumberToStore = @(21);
然后使用
NSInteger retrievingInteger = [NumberToStore integerValue];
1
是一个文字,如果合适的话,编译器将使其成为适当的数字types。
但是,请注意,虽然NSInteger
和int
是大多数意图和目的相同的东西, NSNumber
是一个对象types。 对于这种情况,你的代码是没有意义的(不应该编译没有警告)。
(实际上,在指针算术方面,有些情况下会有一定的意义,但这完全不是你想要的。)
对于NSNumber的情况,你会想要的东西,如:
day = [NSNumber numberWithInt:[day intValue] + 1];
NSInteger
和int
是等价的, NSNumber
是一个用于存储原始数字types(int,long,float等)的对象。
你发布的示例代码将工作得很好,如果day
是一个NSinteger
,如果它是一个NSNumber
它将不会工作。