Objective-c-function-call-by-value

提供:Dev Guides
移動先:案内検索

Objective-Cの値による関数呼び出し

引数を関数に渡す*値による呼び出し*メソッドは、引数の実際の値を関数の仮パラメーターにコピーします。 この場合、関数内のパラメーターを変更しても、引数には影響しません。

デフォルトでは、Objective-Cプログラミング言語は_call by value_メソッドを使用して引数を渡します。 一般に、これは、関数内のコードが関数の呼び出しに使用される引数を変更できないことを意味します。 次のような関数* swap()*の定義を考慮してください-

/*function definition to swap the values*/
- (void)swap:(int)num1 andNum2:(int)num2 {
   int temp;

   temp = num1;  /*save the value of num1*/
   num1 = num2;  /*put num2 into num1*/
   num2 = temp;  /*put temp into num2*/

   return;
}

さて、次の例のように実際の値を渡すことで関数* swap()*を呼び出しましょう-

#import <Foundation/Foundation.h>

@interface SampleClass:NSObject
/*method declaration*/
- (void)swap:(int)num1 andNum2:(int)num2;
@end

@implementation SampleClass

- (void)swap:(int)num1 andNum2:(int)num2 {
   int temp;

   temp = num1;  /*save the value of num1*/
   num1 = num2;  /*put num2 into num1*/
   num2 = temp;  /*put temp into num2*/

}

@end

int main () {

  /*local variable definition*/
   int a = 100;
   int b = 200;

   SampleClass *sampleClass = [[SampleClass alloc]init];

   NSLog(@"Before swap, value of a : %d\n", a );
   NSLog(@"Before swap, value of b : %d\n", b );

  /*calling a function to swap the values*/
   [sampleClass swap:a andNum2:b];

   NSLog(@"After swap, value of a : %d\n", a );
   NSLog(@"After swap, value of b : %d\n", b );

   return 0;
}

私たちはそれをコンパイルして実行しましょう、それは次の結果を生成します-

2013-09-09 12:12:42.011 demo[13488] Before swap, value of a : 100
2013-09-09 12:12:42.011 demo[13488] Before swap, value of b : 200
2013-09-09 12:12:42.011 demo[13488] After swap, value of a : 100
2013-09-09 12:12:42.011 demo[13488] After swap, value of b : 200

これは、関数内で値が変更されていても、値に変更がないことを示しています。