Restituisce l'array dalla funzione in Objective-C

Il linguaggio di programmazione Objective-C non consente di restituire un intero array come argomento di una funzione. Tuttavia, è possibile restituire un puntatore a un array specificando il nome dell'array senza un indice. Studierai il puntatore nel prossimo capitolo in modo da poter saltare questo capitolo finché non avrai compreso il concetto di puntatori in Objective-C.

Se vuoi restituire un array unidimensionale da una funzione, dovresti dichiarare una funzione che restituisce un puntatore come nell'esempio seguente:

int * myFunction() {
.
.
.
}

Il secondo punto da ricordare è che Objective-C non raccomanda di restituire l'indirizzo di una variabile locale all'esterno della funzione, quindi dovresti definire la variabile locale come static variabile.

Ora, considera la seguente funzione, che genererà 10 numeri casuali e li restituirà usando un array e chiamerà questa funzione come segue:

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

Quando il codice precedente viene compilato insieme ed eseguito, produce un risultato come segue:

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