Llamada a función por valor en Objective-C
los call by valueEl método de pasar argumentos a una función copia el valor real de un argumento en el parámetro formal de la función. En este caso, los cambios realizados en el parámetro dentro de la función no tienen ningún efecto sobre el argumento.
De forma predeterminada, el lenguaje de programación Objective-C utiliza el método de llamada por valor para pasar argumentos. En general, esto significa que el código dentro de una función no puede alterar los argumentos utilizados para llamar a la función. Considere la funciónswap() definición de la siguiente manera:
/* 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;
}
Ahora, llamemos a la función swap() pasando valores reales como en el siguiente ejemplo:
#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;
}
Compilemos y ejecutemos, producirá el siguiente resultado:
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
Lo que muestra que no hay cambios en los valores aunque se hayan cambiado dentro de la función.