Devolver matriz de función en Objective-C
El lenguaje de programación Objective-C no permite devolver una matriz completa como argumento para una función. Sin embargo, puede devolver un puntero a una matriz especificando el nombre de la matriz sin un índice. Estudiará el puntero en el próximo capítulo para que pueda saltarse este capítulo hasta que comprenda el concepto de punteros en Objective-C.
Si desea devolver una matriz unidimensional de una función, deberá declarar una función que devuelva un puntero como en el siguiente ejemplo:
int * myFunction() {
.
.
.
}
El segundo punto a recordar es que Objective-C no aboga por devolver la dirección de una variable local fuera de la función, por lo que tendría que definir la variable local como static variable.
Ahora, considere la siguiente función, que generará 10 números aleatorios y los devolverá usando una matriz y llamará a esta función de la siguiente manera:
#import <Foundation/Foundation.h>
@interface SampleClass:NSObject
- (int *) getRandom;
@end
@implementation SampleClass
/* function to generate and return random numbers */
- (int *) getRandom {
static int r[10];
int i;
/* set the seed */
srand( (unsigned)time( NULL ) );
for ( i = 0; i < 10; ++i) {
r[i] = rand();
NSLog( @"r[%d] = %d\n", i, r[i]);
}
return r;
}
@end
/* main function to call above defined function */
int main () {
/* a pointer to an int */
int *p;
int i;
SampleClass *sampleClass = [[SampleClass alloc]init];
p = [sampleClass getRandom];
for ( i = 0; i < 10; i++ ) {
NSLog( @"*(p + %d) : %d\n", i, *(p + i));
}
return 0;
}
Cuando el código anterior se compila y se ejecuta, produce el siguiente resultado:
2013-09-14 03:22:46.042 demo[5174] r[0] = 1484144440
2013-09-14 03:22:46.043 demo[5174] r[1] = 1477977650
2013-09-14 03:22:46.043 demo[5174] r[2] = 582339137
2013-09-14 03:22:46.043 demo[5174] r[3] = 1949162477
2013-09-14 03:22:46.043 demo[5174] r[4] = 182130657
2013-09-14 03:22:46.043 demo[5174] r[5] = 1969764839
2013-09-14 03:22:46.043 demo[5174] r[6] = 105257148
2013-09-14 03:22:46.043 demo[5174] r[7] = 2047958726
2013-09-14 03:22:46.043 demo[5174] r[8] = 1728142015
2013-09-14 03:22:46.043 demo[5174] r[9] = 1802605257
2013-09-14 03:22:46.043 demo[5174] *(p + 0) : 1484144440
2013-09-14 03:22:46.043 demo[5174] *(p + 1) : 1477977650
2013-09-14 03:22:46.043 demo[5174] *(p + 2) : 582339137
2013-09-14 03:22:46.043 demo[5174] *(p + 3) : 1949162477
2013-09-14 03:22:46.043 demo[5174] *(p + 4) : 182130657
2013-09-14 03:22:46.043 demo[5174] *(p + 5) : 1969764839
2013-09-14 03:22:46.043 demo[5174] *(p + 6) : 105257148
2013-09-14 03:22:46.043 demo[5174] *(p + 7) : 2047958726
2013-09-14 03:22:46.043 demo[5174] *(p + 8) : 1728142015
2013-09-14 03:22:46.043 demo[5174] *(p + 9) : 1802605257