Appel de fonction par référence en Objective-C

le call by referenceLa méthode de transmission d'arguments à une fonction copie l'adresse d'un argument dans le paramètre formel. À l'intérieur de la fonction, l'adresse est utilisée pour accéder à l'argument réel utilisé dans l'appel. Cela signifie que les modifications apportées au paramètre affectent l'argument passé.

Pour passer la valeur par référence, les pointeurs d'argument sont passés aux fonctions comme toute autre valeur. Donc, en conséquence, vous devez déclarer les paramètres de la fonction en tant que types de pointeur comme dans la fonction suivanteswap(), qui échange les valeurs des deux variables entières pointées par ses arguments.

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

Pour vérifier plus de détails sur Objective-C - Pointeurs, vous pouvez consulter le chapitre Objective-C - Pointeurs .

Pour l'instant, appelons la fonction swap() en passant des valeurs par référence 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 */
  
   return;
   
}

@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:27:17.716 demo[6721] Before swap, value of a : 100
2013-09-09 12:27:17.716 demo[6721] Before swap, value of b : 200
2013-09-09 12:27:17.716 demo[6721] After swap, value of a : 200
2013-09-09 12:27:17.716 demo[6721] After swap, value of b : 100

Ce qui montre que le changement s'est reflété en dehors de la fonction, contrairement à l'appel par valeur où les changements ne reflètent pas en dehors de la fonction.