NSNumber和NSInteger有什么区别?我还有更多类似的原始知识应该知道吗?有浮标吗?

最佳答案

现有的答案很有用;添加到他们:

是的,NSUInteger提供的正整数范围是NSInteger的两倍,但我认为在这两者之间进行选择的另一个关键原因只是区分情况,其中负值根本没有意义

示例:NSArraycount方法的返回值是NSUInteger,这很有意义,因为我们不能有一个带有负数个元素的数组。当编码人员知道其未签名时,他/她将有更大的自由度来执行在签名情况下可能不可靠的操作,包括移位之类的按位操作。 This blog post详细讨论了有符号与无符号。

我对 CGFloatNSFloat (不存在)的猜测:可能是这样的情况:以NeXTStep命名的代码元素的设计人员根本不需要在时间间隔之外指定太多浮点值。因此,他们给出了NSTimeInterval,它是一个浮点类型,但是显然打算用于时间间隔。而且,坦率地说,拥有该类型非常好,因为您知道它总是要在几秒钟内完成而不必处理结构。当您进入图形世界(Core Graphics所在的地方)时,周围突然浮起,在空中徘徊(哈哈)。因此,在此处引入CGFloat很有意义。本段均为“受过教育的推测”。

另外,只是为了清楚了解,为什么您可能会使用NSInteger等代替原始类型:因为这样可以更轻松地编写可充分利用机器体系结构的可移植代码。例如,CGFloat在某些机器上使用32位,而在其他机器上使用64位,这在很大程度上取决于这些机器对于这些大小的效率差距。在某些情况下,使用32位和64位并没有真正的提速,因此您最好使用64位。如果您将事物声明为CGFloat,则重新编译时会突然获得“免费”的额外精度。

而且,正如iKenndac所指出的那样, NSNumber是所有这些(以及其他原始或准原始类型,例如BOOL)的包装器类,使您可以将其包含在NSArrayNSDictionary中,从而更轻松地对其进行归档,并执行NSObject可以执行的其他操作。

关于iphone - NSNumber和NSInteger有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1285098/

10-10 21:06