2014
Jan
29

NSNumber 基本

NSNumber 是一个储存数字的 Object,NSNumber 不像 C 语言的 int ,不能直接拿来做加、减、乘、除,如果你想简单一点使用数字的处理,可以使用另一个 Object : NSInteger


首先介绍一下如何处理整数的问题。

宣告一个整数

  • NSNumber *a = [NSNumber numberWithInt:1];

使用上面这句可以宣告一个整数,其值 = 1

分配 memory 给一个整数变数

NSNumber alloc
  1. NSNumber *c = [[NSNumber alloc] init];
  2. 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 add
  1. NSNumber *a = [NSNumber numberWithInt:1];
  2. NSNumber *b = [NSNumber numberWithInt:2];
  3. NSNumber *c = [[NSNumber alloc] init];
  4. c = @([a intValue] + [b intValue]);
  5. NSLog(@" Sum = %d", [c intValue]);
  6. // Sum = 3

NSNumber 操作也有一个比较简单的写法,使用 a.intValue + b.intValue 也能有相加的效果。

a.intValue
  1. NSLog(@" sum = %d", (a.intValue + b.intValue + 10) );

NSLog 直接印出相加结果

在上一个范例中,如果我不想多建立一个变数 c ,这时我可以直接在 NSLog 中,将数字相加,然后印出,下面的程式中第三行与第五行,分别印出两种变数型态 (字串与数字)。

Example
  1. NSNumber *a = [NSNumber numberWithInt:1];
  2. NSNumber *b = [NSNumber numberWithInt:2];
  3. NSLog(@" sum = %d", ([a intValue] + [b intValue]) );
  4. 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 次。

for loop
  1. NSInteger i,n;
  2. n = 20;
  3. for (i = 0; i < n; i++ ) {
  4. NSLog(@" index = %lo", i);
  5. }
  6. //index = 1
  7. //index = 2
  8. //...

%lo 是指长整数的型态

NSInteger Array

C 语言中要使用 Int Array,可以宣告 int[] , or int* , Obj-C 也是用类似的方式。

  • 使用 calloc 分配记忆体。
Example
  1. NSInteger* myArray = (NSInteger*)calloc(20, sizeof(NSInteger));
  2. NSInteger i ,n;
  3. n = 5;
  4. for (i = 0; i < n; i++) {
  5. myArray[i] = i;
  6. }
  7.  
  8. for (i = 0; i < n; i++) {
  9. NSLog(@"content = %d", myArray[i]);
  10. }
  11.  
  12. //Output:
  13. //content = 0
  14. //content = 1
  15. //content = 2
  16. //content = 3
  17. //content = 4

回應 (Leave a comment)