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)