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。

但是,请注意,虽然NSIntegerint是大多数意图和目的相同的东西, NSNumber是一个对象types。 对于这种情况,你的代码是没有意义的(不应该编译没有警告)。

(实际上,在指针算术方面,有些情况下会有一定的意义,但这完全不是你想要的。)

对于NSNumber的情况,你会想要的东西,如:

 day = [NSNumber numberWithInt:[day intValue] + 1]; 

NSIntegerint是等价的, NSNumber是一个用于存储原始数字types(int,long,float等)的对象。

你发布的示例代码将工作得很好,如果day是一个NSinteger ,如果它是一个NSNumber它将不会工作。