我应该使用 NSNumber 而不是基本的 C 数字类型吗?
使用 Foundation Framework 中的 NSNumber 代替基本 C 类型(int、float、double)有什么好处?
使用 NSNumber:
NSNumber *intNumber;
NSInteger myInt;
intNumber = [NSNumber numberWithInteger: 100];
myInt = [intNumber integerValue];
使用纯 C:
int intNumber;
intNumber = 100;
使用 C 似乎更容易、更经济。
我知道 NSNumber 是一个对象(或类?)类型,但为什么我要使用它们而不是简单的 C 变量?我什么时候应该使用它们?
What is the benefit of using NSNumber from Foundation Framework instead of basic C types (int, float, double)?
Using NSNumber:
NSNumber *intNumber;
NSInteger myInt;
intNumber = [NSNumber numberWithInteger: 100];
myInt = [intNumber integerValue];
Using pure C:
int intNumber;
intNumber = 100;
Seems a lot easier and economic to use C.
I know NSNumber is an object (or class?) type, but why would I use them instead simple C variables? When should I use them?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
NSNumber
的目的只是将原始类型装箱到对象(指针类型)中,因此您可以在需要指针类型值工作的情况下使用它们。一个常见的示例:如果您想在 Core Data 实体中保留数值,则必须使用
NSNumber
。您可以而且应该使用基元进行计算(除非使用小数,在这种情况下您使用
NSDecimal
或NSDecimalNumber
)。The purpose of
NSNumber
is simply to box primitive types in objects (pointer types), so you can use them in situations that require pointer-type values to work.One common example: you have to use
NSNumber
if you want to persist numeric values in Core Data entities.You can and should use primitives for calculations (unless with decimals, in which case you use
NSDecimal
orNSDecimalNumber
).如果您需要将数字作为对象传递,请使用
NSNumber
。如果需要进行算术运算,可以使用
int
和double
。如果您不想担心 32/64 位问题,可以使用 NSInteger 和 CGFloat。If you need to pass a number as an object, use
NSNumber
.If you need to make arithmetic operations, you can use
int
anddouble
. If you don't want to bother with 32/64 bit issues, you can useNSInteger
andCGFloat
.因为在处理某些对象的参数传递时,使用基本数据类型是行不通的。此外,NSNumber 类还为您提供了将值快速转换为其他数据类型的选项。
Because with dealing with passing of parameters with certain objects, using a basic data type will not work. Also, the NSNumber class gives you options for converting values into other datatypes quickly.