什么是的NSNumber和NSInteger的区别?
-
18-09-2019 - |
题
有什么的NSNumber和NSInteger的区别?是否有更多元这样的,我应该知道的吗?是否有一个用于浮?
解决方案
在现有的答案是有用的;添加到它们:
是,NSUInteger
给出正整数作为NSInteger
中两次的范围内,但我认为另一个关键原因,在两者之间进行选择是简单的案件中进行区分的其中负数值根本就没有任何意义。
实施例 NSArray
的count
方法的返回值是一个NSUInteger
,这是有意义的,因为我们可以不具有与元件的负数的阵列。当编码器知道它的签名,他/她有更多的自由来执行,可能是在签约的情况下,包括位操作,如移不可靠的操作。 本博客文章会谈更多关于签名VS无符号的。
我对 CGFloat
VS NSFloat
猜测(不存在):这可能是在NeXTStep的命名代码元素的设计者根本没有需要指定太多的浮点值的情况下,时间间隔之外。于是他们给了NSTimeInterval
,这是一个浮点类型,但是,这显然是旨在与时间间隔使用。而且,坦率地说,这是伟大的,有这种类型的,因为你知道它总是意味着要在几秒钟内,而不必应付一个结构。当你搬进图形世界(其中核芯显卡住),突然漂浮在你周围,在空中盘旋了(哈哈)。因此,它是有道理的引入CGFloat
那里。本段落的所有“受过教育的猜测。”
另外,刚要清楚的为什么你可以使用NSInteger
等,而不是原始类型:因为这种方式更容易编写可移植的代码,是以机器架构的优势。例如,一个使用CGFloat
在一些机器上32位和对他人64位,关于如何的效率间隙多有在这些机器上这些尺寸主要取决于。在某些情况下,有使用32位和64位没有实际的加速,所以你还不如用64位。如果你声明的东西作为CGFloat
的,你突然获得额外的精度“免费”时重新编译。
和,作为iKenndac指出,的 NSNumber
是一个包装类的所有强>这些(和其他原始或准原始类型像BOOL
)以便让您包括在您NSArray
s的和NSDictionary
s,更容易地将它们存档,以及做其他事情,NSObject
s可以做到的。
其他提示
NSNumber
是一类,而不是原始的,并且当你需要把原始数字到词典,阵列,或以其他方式封装它们被使用。 NSInteger
,NSUInteger
,CGFloat
等是简单类型和对应(在如iPhone 32-BT系统)到int
,unsigned int
和float
。
作为一般规则,如果你需要存储一些地方,使用NSNumber
。如果你正在做计算,循环等,使用NSInteger
,NSUInteger
或CGFloat
。
可以包装一个NSInteger
成NSNumber
:
NSNumber *aNumber = [NSNumber numberWithInteger:21];
...并把它找回来:
NSInteger anInteger = [aNumber integerValue];
您可以在这里找到更多信息: http://iosdevelopertips.com/cocoa /nsnumber-and-nsinteger.html
NSInteger的就像传统int
中C.这是一个typedef。还有其他的像NSUInteger
,CGFloat
等,它们都是基本类型的同义词。
当你需要坚持一个数字一个NSArray或NSDictionary中的NSNumber是有用的。标准的做法是使用这些集合与滚动自己;的缺点是它们只能包含Objective-C的对象。
的NSNumber基本上封装了一个int
(或浮动等)成的OBJ-C的对象(类似的“拳击”基本类型C#/ Java的概念),其可以被添加到数组:
NSArray * myArray = [[NSArray alloc] init];
[myArray addObject:3]; // invalid, will not compile.
[myArray [NSNumber numberWithInt:3]]; // ok
有关性能方面的原因,如果可以的话,使用原语类型(如整型,浮点,INT [])。但是,有时候你无法避免的NSArray / NSNumber的,比如当你在读或写项目分成.plist
文件。
的NSNumber一般用于存储变量,NSUInteger用于算术
可以通过执行此改变的NSNumber到NSUInteger:
NSNumber *variable = @1;
NSUInteger variableInt = [variable unsignedIntegerValue];
它之前,但根据经验,一般规则,需要与*被定义为目标C类变量已经说了,而这不需要*变量是C基元。
如由其他人之前所述,NSNumber
是NSObject
子类。它不是一个原语C(如int,无符号整型,浮点,双等)NSInteger
,CGFloat
,NSUInteger
是开始,经过C基元简单typedefs
。
在需要NSNumber
是由于需要使用数字作为参数传递给需要的对象的API。例如,当要存储在一个NSArray
的数,在核心 - 数据,或在一个NSDictionary
。
是否有更喜欢这些,我应该知道的原语?那么,NSNumber
不是原始类型,它环绕各类数字(浮点,整数类型,布尔值等)的。还应该了解NSValue,其是用于NSNumber
基
是否有一个用于浮?没有“NS”的typedef浮法,但NSNumber
可以环绕任何浮点数号:
NSNumber *myPi = [NSNumber numberWithFloat:3.1415926];
或者你可以使用的CoreGraphics在原语类型CGFloat的。