如果我能写:
test_string = [[NSString alloc] init]; and
test_date = [[NSDate alloc] init];
为什么,如果只是为了保持一致性,我不能写:
test_integer = [[NSInteger alloc] init]; or
test_decimal = [[NSDecimal alloc] init];
我该怎么设置它们?
答案 0 :(得分:1)
我建议Number and Value Programming Guide必须阅读。
它将帮助您从这一切开始,但请记住,除非您想要特定使用标量值(C标准值类型:int,float,long等),否则通常会更容易使用它们(商店标准值类型:int,float,long等) NSArray中的值,在微积分上具有顶级nocht精度并避免奇怪的浮动舍入等。)
答案 1 :(得分:1)
您的前两个示例是真实对象,因此必须使用alloc
/ init
(或简写形式new
进行实例化。
NSInteger
只是int
或long
的typedef,具体取决于平台,也就是说,它只是int
或{{1}的另一个名称}}。这些都是所谓的原始类型。它们不是真正的物体,而是更简单的东西。它们没有任何方法,iVars等 - 事实上,它们实际上只是数字,而代表数字的对象(例如long
)则更多。
当速度和内存效率很重要时使用原始类型,并且经常使用整数,因此这些考虑因素很重要。顺便说一句,Smalltalk(启发Objective-C的语法和对象模型的语言)没有原始类型。即使整数,甚至布尔值都是对象。这更加一致(在某些方面更强大),但这是使得Smalltalk在七十年代和八十年代初期相当缓慢的因素之一。
[NSNumber numberWithInt:1]
也不是一个对象,而是一个结构。结构本质上是命名原始值的列表。 Objective-C中其他经常使用的结构可能更明显的是NSDecimal
(包含两个浮点数的结构, x 和 y ),{{1 (同样是一个包含两个浮点数的结构,这次称为 width 和 height ),CGPoint
(一个包含CGSize
结构的结构名为< em> origin ,以及一个名为 size 的CGRect
结构。