繁体   English   中英

int vs NSNumber vs NSInteger

[英]int vs NSNumber vs NSInteger

我有一行代码将根据数据类型“day”和“1”的不同而有所不同。 我相信它是以下,虽然我稍后会检查我的源代码。

day = day + 1;

这有意义吗? 差异会是什么?

NSInteger是一个描述整数的类型定义 - 但它不等同于64位平台上的int
您可以通过cmd单击Xco​​de中的NSInteger来检查typedef。
NSInteger被定义为int建立一个32位的应用程序和当long为64位应用程序。
大多数情况下,您可以使用NSInteger替换int,但在执行此操作时需要考虑一些事项。
Apple的64位Cocoa过渡指南提供了一些相关信息。

NSNumber是一个可以帮助您将数字类型存储为对象的类。 它具有在不同类型和方法之间进行转换的方法,以检索数值的字符串表示形式。
如果您使用类型NSNumber*的变量day ,就像您在示例中所做的那样,您不会修改day的值,而是修改其内存地址。

如果您正在处理时间值,您还可以查看NSDate

NSInteger只是一个整数, NSNumber是一个对象,其中int是原始数据类型。

NSInteger只不过是一个长整数的同义词。

如果您需要在某处存储号码,请使用NSNumber。 如果您正在进行计算,循环等,请使用NSInteger,NSUInteger或int。

您可以使用以下命令将NSInteger包装到NSNumber中:

NSNumber *NumberToStore = @(21);

并使用以下方式恢复

NSInteger retrievingInteger = [NumberToStore integerValue];

1是文字,如果合适,编译器将使其成为合适的数字类型。

但请注意,尽管NSIntegerint对于大多数意图和目的都是相同的,但NSNumber是一种对象类型。 对于这种情况,您的代码没有意义(并且不应该在没有警告的情况下编译)。

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

对于NSNumber案例​​,您需要以下内容:

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

NSIntegerint是等价的, NSNumber是用于存储基本数字类型(int,long,float等)的对象。

你发布的示例代码如果dayNSinteger就可以正常工作,如果它是NSNumber则根本不起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM