Appel de fonction par valeur en Objective-C

le call by valueLa méthode de transmission d'arguments à une fonction copie la valeur réelle d'un argument dans le paramètre formel de la fonction. Dans ce cas, les modifications apportées au paramètre à l'intérieur de la fonction n'ont aucun effet sur l'argument.

Par défaut, le langage de programmation Objective-C utilise la méthode d' appel par valeur pour passer des arguments. En général, cela signifie que le code d'une fonction ne peut pas modifier les arguments utilisés pour appeler la fonction. Considérez la fonctionswap() définition comme suit -

/* 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;
}

Maintenant, appelons la fonction swap() en passant des valeurs réelles comme dans l'exemple suivant -

#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;
}

Compilons et exécutons-le, cela produira le résultat suivant -

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

Ce qui montre qu'il n'y a pas de changement dans les valeurs bien qu'elles aient été modifiées à l'intérieur de la fonction.