NSNumber 基本
NSNumber 是一个储存数字的 Object,NSNumber 不像 C 语言的 int ,不能直接拿来做加、减、乘、除,如果你想简单一点使用数字的处理,可以使用另一个 Object : NSInteger。
首先介绍一下如何处理整数的问题。
宣告一个整数
- NSNumber *a = [NSNumber numberWithInt:1];
使用上面这句可以宣告一个整数,其值 = 1
分配 memory 给一个整数变数
- NSNumber *c = [[NSNumber alloc] init];
- c = [NSNumber numberWithInt:5];
整数相加
接著我宣告三个 NSNumber 物件,分别是 a = 1, b = 2, c,再将相加的结果,存到 c ,算式如 c = a + b。
要从 NSNumber 中将数字取出来的话,必须使用 [xxx intValue] 这个方式,所以程式中必须取得 [a intValue] 与 [b intValue],再将这两个值加起来。
再来第 5 行 Code ,在 NSLog 中使用 %d 代表我要印出一个数字 ,跟上一句一样的道理,我要取出 c 的值,所以使用 [c intValue]。
- NSNumber *a = [NSNumber numberWithInt:1];
- NSNumber *b = [NSNumber numberWithInt:2];
- NSNumber *c = [[NSNumber alloc] init];
- c = @([a intValue] + [b intValue]);
- NSLog(@" Sum = %d", [c intValue]);
- // Sum = 3
NSNumber 操作也有一个比较简单的写法,使用 a.intValue + b.intValue 也能有相加的效果。
- NSLog(@" sum = %d", (a.intValue + b.intValue + 10) );
NSLog 直接印出相加结果
在上一个范例中,如果我不想多建立一个变数 c ,这时我可以直接在 NSLog 中,将数字相加,然后印出,下面的程式中第三行与第五行,分别印出两种变数型态 (字串与数字)。
- NSNumber *a = [NSNumber numberWithInt:1];
- NSNumber *b = [NSNumber numberWithInt:2];
- NSLog(@" sum = %d", ([a intValue] + [b intValue]) );
- NSLog(@" sum = %@", @([a intValue] + [b intValue]) );
NSInteger, NSUInteger
- NSUInteger : U 是指 unsigned 的意思,UInteger 就是 unsigned integer ,代表变数是一个非负整数。
- NSInteger : 代表变数是一个整数。
NSInteger 不像 NSNumber 这么麻烦,想要做个相加还要用 [x intValue] 这样,使用 NSInteger Object ,你就直接使用像 C 语言的 int ,直接操作即可。
Number forloop
一个基本的 for loop 写法,执行 20 次。
- NSInteger i,n;
- n = 20;
- for (i = 0; i < n; i++ ) {
- NSLog(@" index = %lo", i);
- }
- //index = 1
- //index = 2
- //...
%lo 是指长整数的型态
NSInteger Array
C 语言中要使用 Int Array,可以宣告 int[] , or int* , Obj-C 也是用类似的方式。
- 使用 calloc 分配记忆体。
- NSInteger* myArray = (NSInteger*)calloc(20, sizeof(NSInteger));
- NSInteger i ,n;
- n = 5;
- for (i = 0; i < n; i++) {
- myArray[i] = i;
- }
- for (i = 0; i < n; i++) {
- NSLog(@"content = %d", myArray[i]);
- }
- //Output:
- //content = 0
- //content = 1
- //content = 2
- //content = 3
- //content = 4