Chamada de função por referência em Objective-C
o call by referenceO método de passar argumentos para uma função copia o endereço de um argumento para o parâmetro formal. Dentro da função, o endereço é usado para acessar o argumento real usado na chamada. Isso significa que as alterações feitas no parâmetro afetam o argumento passado.
Para passar o valor por referência, ponteiros de argumento são passados para as funções como qualquer outro valor. Portanto, você precisa declarar os parâmetros da função como tipos de ponteiro, como na função a seguirswap(), que troca os valores das duas variáveis inteiras apontadas por seus argumentos.
/* 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;
}
Para verificar mais detalhes sobre Objective-C - Ponteiros, você pode verificar o capítulo Objective-C - Ponteiros .
Por enquanto, vamos chamar a função swap() passando valores por referência como no exemplo a seguir -
#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;
}
Vamos compilá-lo e executá-lo, ele produzirá o seguinte resultado -
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
O que mostra que a mudança se refletiu fora da função, ao contrário da chamada por valor, onde as mudanças não refletem fora da função.