iphone – NSNumber和NSInteger有什么区别?

NSNumber和NSInteger有什么区别?有没有更多的原型,像这些,我应该知道吗?有浮子吗?
现有的答案是有用的;添加到他们:

是的,NSUInteger给出两倍的正整数之间的范围作为NSInteger,但我认为选择两者之间的另一个关键原因是简单地区分负值毫无意义的情况。

示例:NSArray的count方法的返回值是一个NSUInteger,这是有意义的,因为我们不能有一个负数的元素的数组。当编码器知道它是未签名的时,他/她在签名的情况下具有更多的自由来执行可能不可靠的操作,包括诸如移位的逐位操作。 This blog post更多谈论signed vs unsigned。

我猜测关于CGFloat vs NSFloat(不存在):可能是这样的情况,NeXTStep命名的代码元素的设计者根本不需要指定太多的浮点值,在时间间隔之外。所以他们给了NSTimeInterval,这是一个浮点类型,但是这明显是要用于时间间隔。坦白地说,有这种类型是很好的,因为你知道它总是意味着在几秒钟内,而不必处理一个结构。当你进入图形世界(Core Graphics生活的地方)时,突然漂浮在你周围,徘徊在空中(哈哈)。所以在这里介绍一个CGFloat是有意义的。这一段都是“受过教育的投机”。

此外,只是为了清楚为什么可能使用NSInteger等而不是原始类型:因为这种方式,更容易编写可移植代码,充分利用机器架构。例如,CGFloat在一些机器上使用32位,而在其他机器上使用64位,这在很大程度上取决于这些大小的那些机器上的效率差距有多大。在某些情况下,使用32位和64位没有真正的加速,所以你可以使用64位。如果你声明的东西是CGFloat的,你突然得到额外的精度“免费”,当你重新编译。

而且,正如iKenndac所指出的,NSNumber是所有这些(以及其他原始或准原语类型,如BOOL)的包装类,它允许您将它包含在NSArrays和NSDictionary中,更容易归档, NSObjects可以做的事情。

http://stackoverflow.com/questions/1285098/whats-the-difference-between-nsnumber-and-nsinteger

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:iphone – NSNumber和NSInteger有什么区别?