Chiamata di funzione per valore in Objective-C

Il call by valueIl metodo per passare argomenti a una funzione copia il valore effettivo di un argomento nel parametro formale della funzione. In questo caso, le modifiche apportate al parametro all'interno della funzione non hanno effetto sull'argomento.

Per impostazione predefinita, il linguaggio di programmazione Objective-C utilizza il metodo call by value per passare gli argomenti. In generale, ciò significa che il codice all'interno di una funzione non può alterare gli argomenti utilizzati per chiamare la funzione. Considera la funzioneswap() definizione come segue -

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

Ora, chiamiamo la funzione swap() passando i valori effettivi come nell'esempio seguente:

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

Compiliamolo ed eseguiamolo, produrrà il seguente risultato:

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

Il che mostra che non vi è alcun cambiamento nei valori anche se sono stati modificati all'interno della funzione.